关于protected类型不能被不同包的子类访问的问题

我创建一个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,你这个访问的属于其它包中的类