先看一个例子
class A{
}
class B extends A{
}
public class duotai {
public static void main(String[] args) {
A a = new A();
B b = (B)a;
}
}
由于A这个类没有与B建立联系,会报 ClassCastException ,可以通过类的转型来建立联系
class A{
}
class B extends A{
}
public class duotai {
public static void main(String[] args) {
A a = new B();
B b = (B)a;
}
}
其中 A a = new B(); 叫类的向上转型,向上转型失去子类方法。 只有向上转型才能向下转型,也就是后面的强制转换,恢复子类所有方法。
多态的关键是通过父类的引用调用子类重写的方法
父类引用指向子类对象后,用父类引用调用子类重写的方法,此时多态就出现了
public class duotai2 {
public static void main(String[] args) {
Analy a = new Analy();
aaa(a);
Dog dog = new Dog();
aaa(dog);
Cat cat = new Cat();
aaa(cat);
}
public static void aaa(Analy analy){
analy.shot();
}
}
class Analy{
public void shot(){
System.out.println("I'm analy");
}
}
class Dog extends Analy{
public void shot(){
System.out.println("I'm a dog");
}
}
class Cat extends Analy{
public void shot(){
System.out.println("I'm a cat");
}
}