【Java笔记】浅谈C++和Java的运行时多态

    这篇文章仅提供给同时学习C++和Java的童鞋阅读理解。不罗嗦直接切入正题。

    封装、多态、继承是所有面向对象程序设计语言的共同特征。那就不得不提多态了。多态分为静态多态和动态多态,也就是编译时多态和运行时多态。编译时多态的代表就是函数重载,在此略过它。笔者今天主要描述的是动态多态。

    动态多态的一个典型就是:父类对象引用子类对象,C++中还可以父类对象指针指向子类对象。既然说了C++和Java,那就是要描述一下他们两者的区别。以免大家弄混这两门语言的语法。

public class Child extends Base{

    public static void main(String args[]) {
        
        Base base = new Child();        
        base.function();   //OK
        base.function1();  //error
        
    }
    public void function() {
        System.out.println("child");
    }
    public void function1() {
        System.out.println("child");
    }
}
class Base{
    public void function() {
        System.out.println("base");
    }
}

共同点:

    编译时base是Base的对象,运行时base是Child的对象。编译阶段,父类对象引用子类对象的时候,只能调用父类中存在的方法。因为在编译阶段编译器知道base是Base的对象,而Base类中只有 function() 这个方法。因此尝试调用子类特有的方法是不可行的。编译器会提示base没有 function1() 这个方法。

    小结:父类对象仅能调用编译时父类所拥有的方法。

区别:

    C++中,在运行时父类对象调用的成员函数仍然是父类的成员函数,即使子类重写了父类的成员函数。

    而在Java中,运行时,父类对象其实已经成为了子类的对象,它所调用的是子类的方法。

    !!!但是:C++的功能并不是这么弱,要想实现Java中的那种情形,那就要用到虚函数了。即:将被子类覆盖的函数定义为虚函数。笔者可以自行学习C++中的虚函数这一概念,推荐书籍《C++ Primer》。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值