C++重写实践&与java的差异

C++重写父类方法后,父类中同名的方法在子类中就无法被调用,回报这个问题:

java中是没有这个问题的,显然java设计者在设计的时候有意解决了这个问题。

C++实践代码:

#include <iostream>
using namespace std;


class Father{

    private:
        int father1;

    public:
        Father(){
            this->father1 = 11;
            //cout<< "无参构造器"<<endl;
        }
        virtual ~Father(){
            //cout<< "Father析构函数"<<endl;
        }
        int getFather1(){
            cout<< "Father:getFather1()"<<endl;
            return father1;
        }
        int getFather1(int a){
            cout<< "Father:getFather1(int a)"<<endl;
            return father1;
        }
};

class Son : public Father{

    private:
        int son1;

    public:
        Son(){
            this->son1 = 11;
        }
        ~Son(){
            //cout<< "Son析构函数"<<endl;
        }
        int getSon1(){
            return son1;
        }

        // 重写父类方法
        int getFather1(){
            cout<< "Son:getFather1()中调用重写的方法"<<endl;
            return  100;
        }

};


int main(){

    cout << "方法重写实践:" << endl;

    // 调用无参构造器
    Son son;

    // 调用son中重写的方法
    cout << "son.getFather1():" << son.getFather1() << endl;

    // 调用父类同名的方法 【报错】
    cout << "son.getFather1(int a):" << son.getFather1(11) << endl;


    cout << "方法重写实践 end." << endl;

    return 0;
}

java实践代码:

package test.test;


class Father {

    private int father1;

    public Father() {
        this.father1 = 11;
        //cout<< "无参构造器"<<endl;
    }

    public int getFather1() {
        System.out.println("Father:getFather1()");
        return father1;
    }

    public int getFather1(int a) {
        System.out.println("Father:getFather1(int a)");
        return father1;
    }
}

class Son extends Father {

    private int son1;

    public Son() {
        this.son1 = 11;
    }

    public int getSon1() {
        return son1;
    }

    // 重写父类方法
    public int getFather1() {
        System.out.println("Son:getFather1()中调用重写的方法");

        return 100;
    }

}


public class Main1 {

    public static void main(String[] args) {

        Son son = new Son();

        // 调用son中重写的方法
        son.getFather1();

        // 调用父类被重写同名的方法,java中可以
        son.getFather1(11);

        System.out.println("end");
    }


}
原文地址:https://www.cnblogs.com/do-your-best/p/11198725.html