package test1; public class ProtectedTest { protected void say(){ System.out.println("ProtectedTest"); } }
子类A例子: 在子类中直接调用父类protected属性和方法。
1 2 3 4 5 6 7 8 9 10
package test2; import test1.ProtectedTest; public class A extends ProtectedTest { public void speak(){ say();//ok,等价于this.say(),子对象this可以调用父类方法(属性也一样) } public static void main(String[] args) { A a = new A(); a.say();//ok,子对象a可以调用父类方法 }
package test2; import test1.ProtectedTest; public class B extends ProtectedTest{ public void speak(){ say();////ok,等价于this.say(),可以调用父类方法 A a = new A(); a.say(); //此处报错,不允许a调用:The method say() from the type ProtectedTest is not visible //当父类放到其他包下面的时候,这里报错,因为say方法是protected可见性,跨包不可见,因此不可访问 a.speak(); //同样可以调用say(),但是这里是没有问题的,因为是调用的speak()方法,它不是protected方法,但是此方法在定义时调用了say() } public static void main(String[] args) { B b = new B(); b.say();//ok,子对象b可以调用父类方法 } }