Unformatted text preview:

Subclasses Inheritance class Animal int row column will be inherited private Model model private prevents inheritance Animal cannot be inherited void move int direction will be inherited class Rabbit extends Animal inherits row column move but not model or constructor int distanceToEdge new variable not inherited int hideBehindBush new method not inherited Assignment A member of a subclass is a member of the original class a rabbit is an animal Animal animalBehindBush Rabbit myRabbit animalBehindBush myRabbit perfectly legal myRabbit animalBehindBush not legal myRabbit Rabbit animalBehindBush legal syntax but requires a runtime check Assignment II animalBehindBush myRabbit is legal but why int NUMBER OR ANIMALS 8 Animal animals new Animal NUMBER OR ANIMALS animals 0 new Fox animals 1 new Rabbit animals 2 new Deer for int i 0 i NUMBER OR ANIMALS i allowMove animals i legal if defined in Animal Assignment III From previous slide for int i 0 i NUMBER OR ANIMALS i allowMove animals i legal if defined in Animal But for int i 0 i NUMBER OR ANIMALS i if animals i instanceof Rabbit Rabbit animals i tryToHide Here tryToHide is defined only for rabbits We must check whether animals i is a rabbit We must cast animals i to Rabbit before Java will allow us to call a method that does not apply to all Animals Arrays of Objects When you declare an array you must specify the type of its elements Animal animals However Object is a type so you can say Object things declaration things new Object 100 definition You can put any Object in this array things 0 new Fox But you cannot do this things 1 5 why not Wrappers Each kind of primitive has a corresponding wrapper or envelope object byte short int long char boolean float double Byte Short Integer not Int Long Character not Char Boolean Float Double Wrapper constructors Each kind of wrapper has at least one constructor byte short int long char boolean float double new Byte byte value new Short short value new Integer int value new Long long value new Character char value new Boolean boolean value new Float float value new Double double value More wrapper constructors Every wrapper type except Character has a constructor that takes a String as an argument Example Boolean b new Boolean true These constructors for the numeric types can throw a NumberFormatException Example Integer i new Integer Hello Wrapper deconstructors You can retrieve the values from wrapper objects byte by byteWrapper byteValue short s shortWrapper shortValue int i intWrapper intValue long l longWrapper longValue char c charWrapper charValue boolean bo booleanWrapper booleanValue float f floatWrapper floatValue double d doubleWrapper doubleValue Additional wrapper methods Wrapper classes have other interesting features variables Integer MAX VALUE 2147483647 methods Integer toHexString number anyType toString Back to arrays Why bother with wrappers Object things new Object 100 You cannot do this things 1 5 But you can do this things 1 new Integer 5 You cannot do this int number things 1 But you can do this int number Integer things 1 intValue Types and values A variable has both a type and a value Consider Animal animal The type of variable animal is Animal The type of a variable never changes The syntax checker can only know about the type The value of animal might sometimes be a rabbit and at other times be a fox Messages such as animal decideMove are sent to the value The value object determines which method to use Sending messages Java must ensure that every message is legal That is the object receiving the message must have a corresponding method But when the Java compiler checks syntax it can t know what the value of a variable will be it has to depend on the type of the variable If the variable is of type T then either Class T must define an appropriate method or Class T must inherit an appropriate method from a superclass or Class T must implement an interface that declares an appropriate method Overriding methods class Animal int decideMove return Model STAY class Rabbit extends Animal override decideMove int decideMove same signature return random Model MIN DIRECTION Model MAX DIRECTION Overriding methods II When you override a method You must have the exact same signature Otherwise you are just overloading the method and both versions of the method are available When you override a method you cannot make it more private In this example Animal defines a method Every subclass of Animal must inherit that method including subclasses of subclasses Making a method more private would defeat inheritance Some methods cannot be overridden class Animal final boolean canMove int direction class Rabbit extends Animal inherits but cannot override canMove int Some variables cannot be shadowed class BorderLayout public static final String NORTH North If you were to create a subclass of BorderLayout you would not be able to redefine NORTH Some classes cannot be extended final class StringContent When an entire class is made final it cannot be extended Making a class final allows some extra optimizations Very few Java supplied classes are final Some classes cannot be instantiated TextComponent has two subclasses TextField and TextArea You can instantiate create instances of TextField and TextArea but not TextComponent why not Answer 1 used by Component you can make the class abstract Answer 2 You could make the constructor protected Some objects cannot be altered An immutable object is one that cannot be changed once it has been created Strings are immutable objects It s easy to make an object immutable Make all its fields private Provide no methods that change the object Rule 70 Rule 70 Design subclasses so they may be used anywhere their superclasses may be used If a Rabbit is an Animal you should be able to use a Rabbit object anywhere that an Animal object is expected Rule 70 II The Liskov Substitution Principle Methods that use references to base classes must be able to use objects of derived classes without knowing it If you introduce a Deer class you should not have to make any changes to code that uses an Animal If you do have to change code your Animal class was poorly designed Rule 70 III The Open Closed Principle Software entities classes modules methods and so forth should be open for extension but closed for modification You should design classes that can be extended You should never have to modify a class in order to extend it Related style rules I Rule 69 Define small


View Full Document

Penn CIT 591 - Subclasses Lecture notes

Documents in this Course
Stacks

Stacks

11 pages

Arrays

Arrays

30 pages

Arrays

Arrays

29 pages

Applets

Applets

24 pages

Style

Style

33 pages

JUnit

JUnit

23 pages

Java

Java

32 pages

Access

Access

18 pages

Methods

Methods

29 pages

Arrays

Arrays

32 pages

Methods

Methods

9 pages

Methods

Methods

29 pages

Vectors

Vectors

14 pages

Eclipse

Eclipse

23 pages

Vectors

Vectors

14 pages

Recursion

Recursion

24 pages

Animation

Animation

18 pages

Animation

Animation

18 pages

Static

Static

12 pages

Eclipse

Eclipse

23 pages

JAVA

JAVA

24 pages

Arrays

Arrays

29 pages

Animation

Animation

18 pages

Numbers

Numbers

21 pages

JUnit

JUnit

23 pages

Access

Access

18 pages

Applets

Applets

24 pages

Methods

Methods

30 pages

Buttons

Buttons

20 pages

Java

Java

31 pages

Style

Style

28 pages

Style

Style

28 pages

Load more
Loading Unlocking...
Login

Join to view Subclasses Lecture notes and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Subclasses Lecture notes and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?