派生类与基类的成员屏蔽
发布日期:2022-02-22 18:04:11 浏览次数:10 分类:技术文章

本文共 2074 字,大约阅读时间需要 6 分钟。

1. Java 中允许派生类中引入基类的重载方法

例如:

1 package JavaProject; 2 class A{ 3     public void display(){System.out.println("null");} 4     public void display(int i){System.out.println(""+i);} 5 } 6 public class B extends A{ 7     public void display(char a){System.out.println(a);} 8     public static void main(String[]args) 9     {10         B b=new B();11         b.display('a');12         b.display();13         b.display(10);14         15         A a=b;16         a.display('a');//out:97,调用的是display(int)17         a.display();//ok18         a.display(10);//ok19     }20 }

如果要覆盖基类中的方法,可以用@Override 注解,这样可以避免不小心重载

2.C++中不允许派生类中引入基类的重载方法,与基类方法名相同时会屏蔽掉基类中所有的该方法的重载

1 #include
2 using namespace std; 3 class A { 4 public: 5 void display() { cout << "null" << endl; } 6 void display(int i) { cout << i << endl; } 7 }; 8 class B :public A{ 9 public:10 void display(char i) { cout << i << endl; }11 };12 int main()13 {14 B b = B();15 b.display('a');16 //b.display();//error C++中要完成在派生类中覆盖基类的方法,就会屏蔽掉基类中重载的所有方法17 18 A a = b;19 a.display();//null20 a.display(10);//out:1021 a.display('a');//out:97 调用的是dispaly(int)。22 return 0;23 }

 3.Java与C++中的继承关系中多态的体现

Java中:

1 package JavaProject; 2 class A{ 3     public void display(int i){System.out.println(i);} 4 } 5 public class B extends A{ 6     public void display(int a){System.out.println(a+10);} 7     public static void main(String[]args) 8     { 9         A a=new B();10         a.display(10);//2011     }12 }

Java 中没有相对C++而言没有虚函数和指针,所以当派生类中方法名、参数列表与基类中的一样时,发生的是覆盖,而没有隐藏的用法

C++中:

1 #include
2 using namespace std; 3 class A { 4 public: 5 virtual void display(int i) { cout << i << endl; } 6 }; 7 class B :public A{ 8 public: 9 virtual void display(int i) { cout << i + 10<< endl; }10 };11 int main()12 {13 A * a = new B();14 a->display(10);15 /*16 A a=B();17 a.display();//10 隐藏用法18 */19 20 return 0;21 }

  C++中发生覆盖必须满足三个条件:(1)使用虚函数 (2)方法名相同 (3)参数列表相同

转载于:https://www.cnblogs.com/MyBlog-Richard/p/5512238.html

转载地址:https://blog.csdn.net/dengsigukan55762/article/details/101976060 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java/C++之 public、protected、private ; virtual & abstract
下一篇:VS中逻辑文件夹与实际文件夹

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月05日 22时07分48秒