Java多态基础

Java多态基础

面向对象的三个基本特征:封装,继承,多态。继承和封装比较简单这里就省略了,主要学习一下多态的运用。

多态

多态是同一个行为具有多个不同表现形式或形态的能力。通俗来讲就是同一个接口的不同的实现。想要了解多态就要先了解两个基本点,重写和重载,其中重载也属于多态的一种表现形式,附带上链接:
链接: https://blog.csdn.net/qq_37550867/article/details/105845568.

调用方法的优先级
this.show(O)>super.show(O)>this.show((super)O)>super.show((super)O)

class A {
    public String show(D obj) {
            return ("A and D");
    }
    public String show(A obj) { 
           return ("A and A");
    }
} 
class B extends A{
    public String show(B obj){
            return ("B and B");
    }    
    public String show(A obj){  
          return ("B and A"); 
    }
    public String show(C obj){    
        return ("B and C"); 
    }
} 
class C extends B{ }
class D extends B{ }

public class a12 {  
  public static void main(String[] args) { 
         A a1 = new A();   
         A a2 = new B();        
         B b = new B();        
         C c = new C();        
         D d = new D();         
         System.out.println("1--" + a1.show(b));        
         System.out.println("2--" + a1.show(c));        
         System.out.println("3--" + a1.show(d));        
         System.out.println("4--" + a2.show(b));        
         System.out.println("5--" + a2.show(c));        
         System.out.println("6--" + a2.show(d));        
         System.out.println("7--" + b.show(b));        
         System.out.println("8--" + b.show(c));        
         System.out.println("9--" + b.show(d));    
         }
}

//输出结果
1--A and A
2--A and A
3--A and D
4--B and A
5--B and A
6--A and D
7--B and B
8--B and C
9--A and D

按照 this.show(O)>super.show(O)>this.show((super)O)>super.show((super)O) 这个的顺序来推,简单解释几个例子:

第一个 a1.show(b)

根据A a1 = new A() 可知 a1 指向了A类的实例。
当a1.show(b)时 ,首先执行第一步this.show(O) ,a1会去找A类中有没有一个 String show(B b)的方法,这里是没有的。
执行第二步super.show(O),a1再去找A的父类中有没有这个方法,但A没有父类。
执行第三步,this.show((super)O),a1去找B的父类,也就是A,再在A类中找是不是有String show(A a)这个方法,发现确实有,最后调用本方法,所以是A and A。

第六个 a2.show(d)

简单提两个点,这里a2指向的是B类的实例,利用: 上转型对象创建。因为为B类中没有String show(D d)的方法,所以去B类的父类也就是A类中找,发现存在此函数。所以输出是A and D。

代码转载于:

https://www.jianshu.com/p/f2f9d8b190b2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值