java 多态特性
一。对象的多态特性
1.引用多态
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
2.方法多态
创建本类对象时,调用本类的方法
创建子类对象时,调用的方法为子类的重写方法或者继承的方法(不能调用子类独有的方法)public class Animal {
public void eat() {
System.out.println("动物具有吃的能力");
}
}
public class Dog extends Animal {
public void eat() {
System.out.println("狗吃肉");
}
public void watchDoor() {
System.out.println("狗看门");
}
}
package DuoTai;
public class Cat extends Animal {
}
public class Initial {
public static void main(String[] args) {
Animal obj1 = new Animal();
Animal obj2 = new Dog();
//Dog obj3 = new Animal() ; 错误:子类的引用不能指向父类的对象
obj1.eat();
obj2.eat();
//obj2.watchDoor(); 错误:不能调用子类独有的方法
}
}
输出结果:
![]()
二。引用类型转换
向上类型转化(隐式/自动)无风险
向下类型转换 有风险
利用 instanceof 运算符来避免运算符转换的安全性问题
public class Initial {
public static void main(String[] args) {
/*Animal obj1 = new Animal();
Animal obj2 = new Dog();
//Dog obj3 = new Animal();错误子类的引用不能指向父类的对象
obj1.eat();
obj2.eat();
//obj2.watchDoor(); 不能调用子类独有的方法*/
/**
* 多态类型中的引用类型转换
*/
Dog dog = new Dog();
Animal animal = dog;//向上类型转换
Dog dog2 = (Dog) animal; //向下类型转换(强制类型转换)
if (animal instanceof Cat) {
Cat cat = (Cat) animal; //编译时为cat类 ,运行为dog类 ,所以运行报错
}else {
System.out.println("无法进行类型转化!");
}
}
}
输出结果: