含义:
主要是使用重写的方法,子类赋值给父类对象
用法:
Test1.java
public class Test1 {
public static void main(String[] args) {
//常规方式
Dog dog = new Dog();
dog.eat();
dog.lookDoor();
Cat cat = new Cat();
cat.eat();
cat.catchMouse();
//多态方式
Animal animal = new Dog();
animal.eat();
// animal.lookDoor(); //报错,不能调用子类独有的方法
Animal animal2 = new Cat();
}
}
其他 Animal.java Dog.java Cat.java
//Animal.java
public abstract class Animal {
public abstract void eat();
}
//Cat.java
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃饭");
}
//特有方法
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}
//Dog.java
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃饭");
}
//特有方法
public void lookDoor(){
System.out.println("狗看门");
}
}
优缺点:
原始方式:
优点:能调用重写,调用父类非私有,能调自己特有的
缺点:扩展性差
多态:
优点:扩展性好
缺点:不能调用子类特有的
//比如定义一个方法
Animal animal = new Dog();
Animal animal2 = new Cat();
Animal animal3 = new Bee();
//new多个只需要一个方法即可处理
function1(animal);
function1(animal1);
function1(animal2);
public static function1(Animal animal){
}
//如果用原始方法
public static function1(Dog dog){
}
//那么每次new一个对象,可能就需要重写一个方法出来,扩展性很差
多态转型:
//多态的向上转型
//把Dog类转换为Animal
Animal animal = new Dog();
//多态的向下转型
Dog dog = (Dog)animal;
//就可以使用子类的特有功能
注意:可能会出现类型转换异常(ClassCastException)
向下转型的时候可能出现两边类型不一致!
解决:在向下转型之前,先判断类型
if(animal instanceof Dog){
Dog dog = (Dog) animal;
}
if(animal instanceof Cat){
Cat cat = (Cat) animal;
}