Presentation is loading. Please wait.

Presentation is loading. Please wait.

Session 22 Chapter 11: Implications of Inheritance.

Similar presentations


Presentation on theme: "Session 22 Chapter 11: Implications of Inheritance."— Presentation transcript:

1 Session 22 Chapter 11: Implications of Inheritance

2 Using Images in Java Image class in java.awt.Image Toolkit (see section 17.6 of text) contains some useful utilities: –getImage() takes a string or URL and returns a value of type Image –getScreenSize() returns a Dimension object containing the number of pixels of both the height and width –getScreenResolution() returns the number of dots per inch Dividing one by the other will yield the physical size of the screen –getFontList() returns an array of strings that contain the names of the fonts available on the current system –etc....

3 Simple Image Code import java.awt.*; public class ImageTestApp extends Frame { private Image demo; public static void main(String[] args) { ImageTestApp app = new ImageTestApp(); } public ImageTestApp() { setTitle( "Image Test" ); setSize( 450, 450 ); demo = Toolkit.getDefaultToolkit().getImage("logo.gif" ); show(); } public void paint( Graphics g ) { g.drawImage( demo, 200, 200, 50, 50, this ); } } // end class ImageTestApp

4 Exercise with Image Code Modify the ImageTestApp so the logo moves to where the mouse is pressed in the frame.

5 A Solution import java.awt.*; import java.awt.event.*; public class ImageTestApp extends Frame { private Image demo; private int demoX; private int demoY; private int demoSize; public static void main(String[] args) { ImageTestApp app = new ImageTestApp(); } public ImageTestApp() { setTitle( "Image Test" ); setSize( 450, 450 ); demo = Toolkit.getDefaultToolkit().getImage( "logo.gif" ); demoX = 200; demoY = 200; demoSize = 50; addMouseListener( new MouseKeeper() ); show(); }...

6 A Solution import java.awt.*; import java.awt.event.*; public class ImageTestApp extends Frame {... public void paint( Graphics g ) { g.drawImage( demo, demoX-demoSize/2, demoY-demoSize/2, demoSize, demoSize, this ); } private class MouseKeeper extends MouseAdapter { public void mousePressed( MouseEvent e ) { demoX = e.getX(); demoY = e.getY(); repaint(); } // end mousePressed } // end private class MouseKeeper } // end class ImageTestApp

7 Polymorphism polymorphism comes from the Greek root for “many shapes” polymorphism is about how we can use different objects in the same place in our program, i.e., polymorphism depends on objects that are substitutable for one another Decorators are great examples of polymorphism: –Because the decorator class is a subclass, instance of the decorator can substitute for instances of the superclass –Because the decorator class holds an instance of the superclass, it can hold instances of anything substitutable for the superclass.

8 Polymorphic Variable A polymorphic variable can hold many different types of values Object-oriented languages often restrict the types of values to being subclasses of the declared type of the variable. Example: “PinBallTarget target” can be assigned a “Hole”, “ScorePad”, etc.

9 Implications of Inheritance/Polymorphism At compile-time, the amount of memory for polymorphic variables cannot be determined, so all objects reside in the heap Because values reside in the heap, reference semantics is used for assignment and parameter passing Most natural interpretation of equality is identity. Since programmers often require a different meaning two operators are needed Garbage collection needed since it is hard for a programmer to know if when an object is no longer referenced

10 Typical Memory Layout Program Global variables Stack Heap

11 Stack-based Memory Objects are stored on the heap When a method is called, an activation record is allocated on the stack to hold: –return address (where to return after execution) –parameters –local variables (stuff declared in the method) When a method returns, the activation record is popped Main: ObjA a = new ObjA(); ObjB b = new ObjB(); a.do(5, b) public class ObjA { int x = 100; public void do (int y, ObjB myB) { int loc = 6; int t = myB.doMore(loc);... } public class ObjB { int z = 30; public int doMore(int i) { z = z + i; return z; }


Download ppt "Session 22 Chapter 11: Implications of Inheritance."

Similar presentations


Ads by Google