When we talk about the inheritance of class members, it's very important to remember when the binding occurs and what type they are bound to.
Only overridden instance methods are bound at run time; and this kind of binding depends on the instance object type. For example:
public class Parent { public void writeName() { System.out.println("Parent"); } } public class Child extends Parent { public void writeName() { System.out.println("Child"); } public static void main(String [] args) { Parent p = new Child(); p.writeName(); } }
The output is :
Child
Instance variables, static variables, static overridden methods and overloaded methods are all bound at compile time; and this kind of binding depends on the type of the reference variable and not on the object. For Example:
public class Parent { private static String age = "50"; private String hairColor = "grey"; public void writeName() { System.out.println("Parent"); } } public class Child { private static String age = "20"; private String hairColor = "brown"; public void writeName() { System.out.println("Child"); } public void writeName(String order) { System.out.println(order + " Child"); } public static void main(String [] args) { Parent p = new Child(); System.out.println("age: " + p.age); System.out.println("hairColor: " + p.hairColor); Child c = new Child(); c.writeName("first"); } }
The output is:
age: 50 hairColor: grey first Child
Comments
Post a Comment