A类在a包
package a;
import b.B;
public class A {
protected void sys() {
System.out.println("A protected sys方法");
}
public static void main(String[] args) {
new B().sys();// 非法(想打印 B protected sys方法)
((A)new B()).sys();// 合法 打印 B protected sys方法
//同一个对象,采用向上转型,就能执行被保护的方法
//接口和实现类,接口中的方法只能是public(只能是public的原因应该是让调用方不存在非法调用)
//上述采用非接口类(实类、抽象类),只要定义的方法能够执行(执行环境不非法),依旧能够执行子类的受保护方法
}
}
B类在b包
package b;
import a.A;
public class B extends A {
protected void sys() {
System.out.println("B protected sys方法");
}
}
此绕过protected 的保护机制,常用于 框架中,接口定义protected 方法,实现类在其他包(或给框架使用者实现),接口所在包 需要调用此方法。