目录
1.表现形式
2.前提条件
1.有继承关系
2.有父类引用指向子类对象
3.有方法的重写
3.注意事项
代码演示
代码结构
1.表现形式
父类类型 对象名字 = new 子类对象();
2.前提条件
1.有继承关系
2.有父类引用指向子类对象
3.有方法的重写
3.注意事项
1.调用成员方法,编译看左边,看左边有没有这个方法,不然就编译失败报错
运行看右边,调用的是右边的对象的方法,即子类的方法
2.调用成员变量,编译运行都看左边
animal a = new dog();
a.name 调用成员变量,看左边,左边有这个变量,编译成功,运行也看左边,左边是animal 所以 name=animal
a.show 调用成员方法,看左边,左边有这个方法,编译成功,运行看右边,子类对父类的show方法进行重写,所以调用的是子类的show方法,所以打印的是show dog
代码演示
代码结构
package animalpakage;class animal {String name = "animal";public void show() {System.out.println(name + "animal show");}
}class dog extends animal {String name = "dog";@Overridepublic void show() {System.out.println(name + "dog show");}
}class cat extends animal {String name = "cat";@Overridepublic void show() {System.out.println(name + "cat show");}}
package animalpakage;public class animalTest {public static void main(String[] args) {animal a=new dog();System.out.println(a.name);a.show();}
}
给dog加上特有的方法,编译看左边,父类没有dogthing这个方法,所以报错了
class dog extends animal {String name = "dog";@Overridepublic void show() {System.out.println(name + "dog show");}public void dogthing(){System.out.println(name + "dog eat bone");}
}
那么如何使用这个子类特有的方法呢?
需要转类型,但需要先判断它是不是dog这个类型
package animalpakage;public class animalTest {public static void main(String[] args) {animal a=new dog();System.out.println(a.name);a.show();if(a instanceof dog d){d.dogthing();}}
}