一、多态:对象的多种形态(继承是多态的实现基础)
父类Animal
package shuqi;
public class Animal{
//public int age=10;
//public String name;
public void eat(){
System.out.println("动物可以吃东西");
}
//public Animal(){
// System.out.println("Animal类执行了");
// //age=20;
}
}
子类Dog
package shuqi;
public class Dog extends Animal {
public int age=20;
public void eat(){
System.out.println("狗可以吃肉");
}
public void watchDoor(){
System.out.println("狗可以看门");
}
}
子类Cat
package shuqi;
public class Cat extends Animal {
}
测试类Initial
package shuqi;
public class Initial {
public static void main(String[] args) {
Animal obj1=new Animal();
Animal obj2=new Dog();
Animal obj3=new Cat();
obj1.eat(); //引用父类的eat方法
obj2.eat(); //这个时候子类中的eat已经重写了,所以引用的是子类的eat方法
obj3.eat(); //继承父类eat方法
// Dog dog = new Dog();
// Animal animal=dog;
// Dog dog2=(Dog)animal;
// if(animal instanceof Cat){
// Cat cat=(Cat)animal;
// }
// else{
// System.out.println("无法进行类型转化");
// }
//
}
}
(1)引用多态
父类的引用可以指向本类的对象 Animal obj1=new Animal();
父类的引用可以指向子类的对象 Animal obj2=new Dog();
(2)方法多态
创建本类对象时,调用的方法为本类方法
创建子类对象时,调用的方法为子类重写的方法或者继承的方法
子类中独有的方法不可以被父类的引用指向子类的对象所调用
二、多态的引用类型转换
(1)向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
(2)向下类型转换(强制类型转换),是大类型到小类型的转换
(3)instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。
package shuqi;
public class Initial {
public static void main(String[] args) {
// Animal obj1=new Animal();
// Animal obj2=new Dog();
// Animal obj3=new Cat();
// obj1.eat();
// obj2.eat();
// obj3.eat();
Dog dog = new Dog();
Animal animal=dog;
Dog dog2=(Dog)animal;
if(animal instanceof Cat){
Cat cat=(Cat)animal;
}
else{
System.out.println("无法进行类型转化");
}
}
}