C++版
#include <iostream>
using namespace std;
class A{
public:
void p_fun(){
this->pri_fun();
}
private:
void pri_fun(){
cout<<"A::pri_fun"<<endl;
}
};
class B: public A{
};
class C: public A{
private:
void pri_fun(){
cout<<"C::pri_fun"<<endl;
}
};
int main(){
B *b =new B();
b->p_fun(); //输出 A::pri_fun
C *c =new C();
c->p_fun(); //输出 A::pri_fun
return 0;
}
我的问题:
B只继承了A的p_fun().this也是指向B的对象,为什么this可以调用A中的私有方法?
当C中覆盖了pri_fun()后,this为什么不是调用的C中的pri_fun(),却仍然是A中的pri_fun()?
这段代码,通过php、java测试,输出结果一直,都是输出 A::pri_fun
感觉应该是对this的理解不够深入,不了解面向对象在这其中的过程。请大家解惑。
第一B继承A的所有方法,当B调用p_fun() 其实调用继承父类A的p_fun() ,而p_fun()方法是直接访问A类pri_fun()私有方法。所以打印出来cout<<"A::pri_fun"<<endl;
第二种,虽然C继承A类,但你要看清楚,重写的pri_fun()是私有(private),及不能允许外部直接访问的,所以,你其实是调用了A类的p_fun()公有方法,所以输出内容一样。
你面向对象方面比较薄弱你要了解public,protected,private这三个访问权限