Java 对象的多态性——必须画图理解

  • 引用多态(向上转型)
  1. 父类的引用可以指向本类的对象
  2. 父类的引用可以指向子类的对象(动态绑定)
    Outer in=new Outer();
    
    Outer out=new Inner(); //指向子类的对象
    
    一个引用调用的是哪个方法,取决于这个引用所指向的对象
    
    class Outer{
    
    public String A="我";
    
    public void say(){
    
    System.out.println("我");
    
    }
    
    }
    
    class Inner extends Outer{
    
    public String B="你";
    
    public void say(){ //覆写父类方法
    
    System.out.println("你");
    
    }
    
    public void ask(){
    
    System.out.println("他");
    
    }
    
    }
    
     
    
    class ListSetMap {
    
    public static void main(String[] args) {
    
    Outer out=new Inner(); //指向子类的对象
    
    out.say();
    
    //out.ask(); 会找不到符号
    
    }
    
    }

    输出        你

    注意:

            父类不能调用子类新声明的方法

            子类的应用是不能指向父类的对象的

            

      Tips:

            一个引用能调用什么成员(变量和函数),取决于这个引用的类型(Outer )就是类型,里面没有ask()方法,所以不能调用ask();

    • 向下转型

    • 先向上转型
    • 在向下转型
      class ListSetMap {
      
      public static void main(String[] args) {
      
      Outer o=new Inner(); //向上转型
      
      Inner I=(Inner) o; //向下转型
      
      System.out.println(I.A); //调用父类的A属性
      
      System.out.println(I.B);
      
      I.say();
      
      I.ask();
      
      }
      
      }

       

      输出

      我
      
      你
      
      你
      
      他

       

      可以通过instanceof来判断一个引用是否属于一个类

      Outer o=new Outer(); //向上转型
      
      Outer k=new Inner();
      
      System.out.println(o instanceof Inner);
      
      System.out.println(k instanceof Inner);

      输出

              false

              true

       

       

       

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值