Java中的多态性表现:
1、方法的重载和重写;
2、可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现;
创建一个父类Animal类
public class Animal {
public void say() {
System.out.println("我是一个小动物");
}
}
创建一个Cat子类继承Animal父类
public class Cat extends Animal{
public void say() {
System.out.println("我是一只小猫咪");
}
}
创建一个Dog子类继承Animal父类
public class Dog extends Animal{
public void say() {
System.out.println("我是一只小汪汪");
}
}
创建一个测试类Test类
public class Test {
public static void main(String[] args) {
//父类引用指向Dog子类的具体实现
Animal animal = new Dog();
animal.say();
animal = new Cat(); //更换实现
animal.say();
}
}
运行输出:
我是一只小汪汪
我是一只小猫咪
对象的转型
向上转型:子类对象->父类对象(安全)
例如上面的实例:Animal animal=new Dog();
向下转型:父类对象->子类对象(不安全)
public class Test {
public static void main(String[] args) {
//父类引用指向Dog子类的具体实现
Animal animal = new Dog();
animal.say();
//向下转型
Dog dog=(Dog) animal;
dog.say();
// 向下转型 因为animal指向的是Dog具体实现 所以会报错
Cat cat=(Cat) animal;
cat.say();
}
}
运行输出:
我是一只小汪汪
我是一只小汪汪
Exception in thread "main" java.lang.ClassCastException: duotai.Dog cannot be cast to duotai.Cat
at duotai.Test.main(Test.java:17)