zoukankan      html  css  js  c++  java
  • 多态向上转型,向下转型

    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();
     
    }
    }
     
    }
     
     
    运行结果:

     
    1. eat fish  
    2. catchMouse  
    3. eat bone  
    4. bark  
  • 相关阅读:
    LF 第三章 装饰器和迭代器相关
    Python 文件管理
    Python 强制类型转换
    安装模块
    LF 第三章
    pep8 Python编码规则
    Help on module pyclbr:
    Help on class timedelta in module datetime:
    Help on function meshgrid in module numpy.lib.function_base:
    Help on module matplotlib.cm in matplotlib:
  • 原文地址:https://www.cnblogs.com/xiaoshuaidiboke/p/7147371.html
Copyright © 2011-2022 走看看