多态的实现机制是什么?(面向对象技术)

本文详细介绍了Java中实现多态的两种机制——方法的重载(overload)和覆盖(override)。方法重载在编译时决定调用哪个方法,而方法覆盖则在运行时动态绑定,实现运行时多态。通过示例代码解释了如何通过构造函数调用子类覆盖的方法,展示了多态的特性。同时,文章强调了成员变量不具备多态性的概念,并通过示例说明了成员变量的值取决于变量类型而非对象类型。
摘要由CSDN通过智能技术生成

常见笔试题:
Java 中提供了哪两种用于多态的机制?(留下你的答案吧@)

多态的实现机制是什么?

多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作作用在不同对
象时,会有不同的语义,从而会产生不同的结果,例如,同样是执行“+”操作,“3 +4”用
来实现整数相加,而“3”+“4”却实现了字符串的连接。在 Java 语言中,多态主要有以下
两种表现方式:
1)方法的重载(overload)。重载是指同一个类中有多个同名的方法,但这些方法有着不
同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。
2)方法的覆盖(override)。子类可以覆盖父类的方法,因此同样的方法会在父类与子类
中有着不同的表现形式。在 Java 语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的实例对象。而程序调用的方法在运行期才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。通过这种动态绑定的方法实现了多态。由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖实现的多态也可以被称为运行时多态,示例如下。

package Text;
class Base{
    public Base(){
        g();
    }
    public void f(){
        System.out.println("Base f()");
    }
    public  void g(){
        System.out.println("Base g()");
    }
}
class Derived extends Base{
    public void f(){
        System.out.println("Derived f()");
    }
    public  void g(){
        System.out.println("Derived g()");
    }
}
public class Test {
    public static void main(String[] args) {
        Base b =new Derived();
        b.f();
        b.g();

    }
}

运行结果:

Derived g()
Derived f()
Derived g()

上例中,由于子类 Denived 的f()方法和g()方法与父类 Base 的方法同名,因此 Derived 的
方法会覆盖 Base 的方法。在执行 Base b = new Derived()语句时,会调用 Base 类的构造函数,
而在 Base 的构造函数中,执行了 g()方法,由于 Java 语言的多态特性,此时会调用子类 De
rived 的g()方法,而非父类 Base 的 g()方法,因此会输出 Derived g()。由于实际创建的是
Derived 类的对象,后面的方法调用都会调用子类 Derived 的方法。
此外,只有类中的方法才有多态的概念,类中成员变量没有多态的概念,示例如下。

package Text;
class Base {
    public  int i = 1;
}
class Derived extends Base{
    public  int i =2;
}
public class Test {
    public static void main(String[] args) {
     Base b = new Derived();
        System.out.println(b.i);
    }
}

运行结果:

1

由此可见,成员变量是无法实现多态的,成员变量的值取父类还是子类并不取决于创建对象的类型而是取决于所定义变量的类型,这是在编译期间确定的。在上例中,由于 b 所属的类型为 Base,b.i 指的是 Base 类中定义的i,因此程序输出结果为1。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纳什1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值