Java方法重写是子类重写父类同名的方法,子类方法覆盖了父类的方法。而对于属性,子类不会覆盖父类同名的属性。
如果子类没有定义属性,子类会继承最近父类的属性。
如果创建子类对象后,父类和子类对象都会保存一份自己的属性,子类对象引用向上转型为父类对象引用,父类对象引用调用的是子类重写的方法,调用的属性仍然是父类的属性。
class Parent{
public String name = "Parent";
public void printName(){
System.out.println("Parent printName()");
}
}
public class Child extends Parent{
public String name = "Child";
public void printName(){
System.out.println("Child printName()");
}
public static void main(String[] args) {
Child child = new Child();
Parent parent = child; //子类向上转型为父类
parent.printName(); //调用的是子类的方法 Child printName()
System.out.println(child.name); //子类的属性 Child
System.out.println(parent.name); //父类的属性 Parent
}
}
结果: