Java基础中的多态理解

个人对Java中多态的部分理解,多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

而关键的问题在于两点:一、子类与父类的关系。二、重载和重写方法的调用问题

在多态中子类对象可以直接当成父类对象来使用,但是相反则不行。具体的例子就是,运输工具是父类,车辆是子类,所以车辆对象一定具备运输工具对象的属性,但是运输工具对象就未必具有车辆对象的特性。所以车辆对象可以当作运输工具对象来使用(子类对象父类可用),但是运输工具对象就不可以当作车辆对象来使用。更需要注意的一点是,当把子类对象当作父类对象使用时,子类对象将所有子类的特性,只保留与父类同名的属性和方法(方法的参数类型也要相同)

具体例子如下:

代码:

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");
         } 
}
class C extends B...{} 
class D extends B...{} 
问题:
<span style="white-space:pre">	</span>A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C(); 
        D d = new D(); 
        System.out.println(a1.show(b));   ①
        System.out.println(a1.show(c));   ②
        System.out.println(a1.show(d));   ③
        System.out.println(a2.show(b));   ④
        System.out.println(a2.show(c));   ⑤
        System.out.println(a2.show(d));   ⑥
        System.out.println(b.show(b));     ⑦
        System.out.println(b.show(c));     ⑧
        System.out.println(b.show(d));     ⑨  
答案及解析1,2、根据子类对象父类可用原则,传入b和c均为A的子类,所以输出的是A and A

3. 输出的是A and D

4.由于只保存了与父类名称和变量相同类型的方法,所以输出B and A

5.由于B中无C类参数方法,但是有A类参数方法,所以输出为 B and A

6. 父类中有D参数的方法,所以输出 D and A

7. 输出B and B

8.由于B中无C类参数方法,但是有B类参数方法,所以输出为 B and B(可以看出优先调用最近一级父类的方法)

9.由于B中无C类参数方法,但是有A类参数方法,所以输出为 B and B


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多态是指同一个方法可以被不同类型的对象调用,产生不同的结果。简单来说,就是一个对象可以表现出多种形态。多态是面向对象编程的重要特性之一,也是Java语言的核心概念之一。 在Java多态实现的基础是继承和方法重写。当一个子类继承自父类,并重写了父类的某个方法时,子类的对象可以调用该方法,根据实际调用的对象类型的不同,会产生不同的结果。这个过程称为动态绑定或运行时绑定。 例如,我们有一个Animal类和一个Dog类,Dog类继承自Animal类,并重写了Animal类的speak方法,如下所示: ``` public class Animal { public void speak() { System.out.println("Animal is speaking..."); } } public class Dog extends Animal { @Override public void speak() { System.out.println("Dog is barking..."); } } ``` 现在我们创建一个Animal类型的对象a1和一个Dog类型的对象d1,调用它们的speak方法: ``` Animal a1 = new Animal(); Dog d1 = new Dog(); a1.speak(); // 输出:Animal is speaking... d1.speak(); // 输出:Dog is barking... ``` 可以看到,虽然a1和d1都调用了speak方法,但是它们输出的结果不同,这就是多态的表现。在调用a1的speak方法时,由于a1是Animal类型的对象,所以调用的是Animal类的speak方法;在调用d1的speak方法时,由于d1是Dog类型的对象,所以调用的是Dog类重写的speak方法。 Java多态机制可以使代码更加灵活和可扩展,提高了代码的重用性和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值