先写一个父类(Animal)
public class Animal {
public void call(){
System.out.println("动物叫");
}
}
写一个子类,继承父类(Dog)
public class Dog extends Animal{
@Override
public void call() {
System.out.println("汪汪汪");
}
public void eat(){
System.out.println("吃骨头");
}
}
再写一个子类,继承父类(Cat)
public class Cat extends Animal{
@Override
public void call() {
System.out.println("喵喵喵");
}
public void eat(){
System.out.println("吃鱼");
}
}
再创建一个类,使用这些类的方法
public class Test01 {
public static void main(String[] args) {
Animal a1 = new Animal();
Cat c1 = new Cat();
Dog d1 = new Dog();
System.out.println("-------");
//多态的条件:1.继承 2.重写
Animal a2 = new Cat();
a2.call();//执行结果:喵喵喵
Animal a3 = new Dog();
a3.call();//执行结果:汪汪汪
a3.eat();//调用这个方法的时候会报错
}
}
原因:
编译的时候,a3是Animal类型的,Animal类中没有eat这个方法;
a3.call和a2.call执行的时候是以子类的类型执行的,子类中重写了父类的方法
要想执行子类中独有的方法,就需要强制类型转换
代码如下:
Dog d2 = (Dog)a3;
d2.eat();//吃骨头
总结:
编译看左边,执行看右边
子类私有方法的使用时,需要强制类型转换