#include <iostream>
using namespace std;
class A
{
public:
//private:
virtual
void print() { cout<< "A print\n"; }
};
class B: public A
{
//public:
protected:
void print() { cout<< "B print\n"; }
};
int main()
{
A *a = new B();
B *b = new B();
/* ok,这个是在编译期,由编译器check 调用引用/指针 自身类型的调用方法的访问权限,
C++规范:编译期并不check引用/指针所指实际对象及其类型
而是在运行期,才去check引用/指针所指实际对象及其类型
动态运行期则不在check实际指向对象所在类的方法的访问权限 */
a->print();
//b->print(); //error,protected 权限不够
return 0;
}
C++中,"多态 访问权限", 从表Base----->Drivered, 访问权限(visibility),可以变小.
//MyBase.java
package mytest;
public class MyBase {
public void print() {
System.out.println("MyBase");
}
}
//MyDrivered.java
package mytest;
public class MyDrivered extends MyBase {
//protected //error, 访问权限(visibility)从Base---->Drivered,不可变小
public
void print() {
System.out.println("MyDrivered");
}
}
Java中,"多态 访问权限", 从表Base----->Drivered, 访问权限(visibility),不可变小