我创建一个pro_door的父类,里面构造一个protected的方法。
然后在另一个包中创建一个子类,继承上述的类,调用父类的protected方法为什么显示错误?
不同包下,子类可通过关键词super访问父类中的protected修饰的方法和属性。
super.opendoor1();
直接通过父类引用访问,不同包下,jvm解析不到是否是子类访问的情况,虽然你是在子类中定义了父类引用。
通过super,jvm就知道是子类要访问父类的protected方法。
子类 实例化 那有问题
应为:pro_woodDoor d = new pro_woodDoor();
你实例化成了父类的对象
Protected可以访问不同包中的子类,我们在不同包中创建子类时,要实例化一个子类的对象,不能实例化一个父类的对象,否则就访问不到父类中protected方法.
main中应该是:pro_woodDoor wooddoor=new pro_woodDoor();
protected可以给子类调用,怎么调用?
直接写父类的protected属性名/成员方法,或者super.属性名/成员方法,
不能用创建对象的方法,比如Fu fu=new Fu(); fu.name或者fu.method();因为这样写JVM解析不到是否是子类访问的情况。
public class A {
protected String name = "父类属性";
protected void method() {
System.out.println("父类方法");
}
}
不同包下的子类调用protected属性和方法:
class B extends A{
public void show() {
System.out.println(name);
method();
System.out.println(super.name);
super.method();
}
}
public class Test {
public static void main(String[] args) {
new B().show();
}
}
我试了一下 protected只能由同包中的子类访问
当然同包中的其他类也是可以访问的
package image;
public class TestMain {
protected int a = 1;
int b = 2;
}
package org;
import image.TestMain;
public class son extends TestMain {
void test() {
int temp1 = a;
int temp2 = b;
}
}
temp2是会报错的
好好看看这个很详细http://www.cnblogs.com/Annoying/p/5403912.html,你这个访问的属于其它包中的类