Java---面向对象编程---多态的向上转型,向下转型
·
多态的向上转型
1)本质:父类的引用指向了子类的对象
2)语法:父类类型 引用名= new 子类类型();
3)特点:编译类型看左边,运行类型看右边。
可以调用父类中的所有成员;
最终运行效果看子类的具体实现 !即调用方法时,按照从子类开始查找方法
,然后调用规则跟前面讲得方法通用规则一致
class Animal{
String name ="动物";
int age = 10;
public void sleep(){
System.out.println("睡");
}
public void run(){
ystem.out.println("跑")
}
public void eat(){
ystem.out.println("吃")
}
public void show(){
ystem.out.println("hello 你好");
}
}
class Cat extends Animal{
pubilc void eat(){
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}

多态的向下转型 ;
1)语法 子类类型 引用名 =(子类类型) 父类引用;
2)只能强转父类的引用,不能强转父类的对象
3)要求父类的引用类型必须指向的是当前目标类型的对象
4)当向下转型后,就可以调用子类类型中所有的成员
Demo类
public class Demo{
Animal animal = new Cat();
Objext obj = new Cat();
//多态的向下转型
// (1) 语法:子类类型 引用名 = (子类类型) 父类引用;
Cat cat = (Cat) animal; // cat的编译类型和运行类型都是Cat
cat.catchMouse();
// (2) 要求父类的引用必须指向的是当前目标类型的对象
// Dog dog = (Dog) animal;
//上述一行代码会报错,因为 animal 本身是 Cat 对象,Cat 不能转换为 Dog
}
Cat类
public class Cat extends Animal {
public void eat(){
System.out.println("猫吃鱼");
}
public void catchMouse(){ //Cat特有的方法
System.out.println("猫抓老鼠");
}
}
Dog类
public class Dog extends Animal{
}
更多推荐
所有评论(0)