首页 > 代码库 > 多态向上转型,向下转型
多态向上转型,向下转型
abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
void eat(){
System.out.println("eat fish");
}
void catchMouse(){
System.out.println("catchMouse");
}
}
class Dog extends Animal{
void eat(){
System.out.println("eat bone");
}
void Kanjia(){
System.out.println("bark");
}
}
public class DuoTaiDemo {
public static void main(String[] args){
// Animal a=new Cat();//类型提升,向上转型
// a.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用。转成子类类型。向下转型
// Cat c=(Cat)a;
// c.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型
//我们能转换的是父类应用转换成了自己的子类对象时,该引用可以被提升也可以被强制转换
// 多态自始至终都是子类对象在做着
//Animal a=new Animal();
//Cat c=(Cat)a;错的
function(new Cat());
function(new Dog());
}
public static void function(Animal a){
a.eat();
if(a instanceof Cat){
Cat c=(Cat)a;
c.catchMouse();
}
else if(a instanceof Dog){
Dog d=(Dog)a;
d.Kanjia();
}
}
}
|
运行结果:
- eat fish
- catchMouse
- eat bone
- bark
多态向上转型,向下转型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。