protected在本类,本包和继承该类的子类里是可访问的有以下代码:
package com.yuchujin.Super
public class Super{
protected int i=0;
}//----------------------------两个不是同一个包package com.yuchujin.Sub
import com.yuchujin.Super;public class Sub
extends Super{ public static void main(String[] args){
Sub subObj = new Sub();
System.out.println(subObj.i); //因为main方法定义写在子类体里,所以可以创建子类对象并调用到超类的protected方法 Super superObj = new superObj();
System.out.println(superObj .i); //ERROR!报错
}
}
不知道为什么在子类体里的main方法中创建一个超类对象就不能调用protected方法了。 是不是因为对于超类的对象superObj来说子类体里就相当于他的其他类?
package com.yuchujin.Super
public class Super{
protected int i=0;
}//----------------------------两个不是同一个包package com.yuchujin.Sub
import com.yuchujin.Super;public class Sub
extends Super{ public static void main(String[] args){
Sub subObj = new Sub();
System.out.println(subObj.i); //因为main方法定义写在子类体里,所以可以创建子类对象并调用到超类的protected方法 Super superObj = new superObj();
System.out.println(superObj .i); //ERROR!报错
}
}
不知道为什么在子类体里的main方法中创建一个超类对象就不能调用protected方法了。 是不是因为对于超类的对象superObj来说子类体里就相当于他的其他类?
可以这样理解,同理下面的也不可以
Super superObj = new Sub();
这行什么意思?你的superObj()哪来的?没有这个类,应该是Super()吧
而System.out.println(superObj.i); 这个不行,因为不在同一个包中,
报错i has protected access in com.yuchujin.Super
综上所述:protected修饰符修饰的虽然是可以被同一个包中以及子类访问,但如果该子类与父类不在同一个包中,依然是不能访问父类中protected修饰的,子类能访问的前提是与父类在同一个包中
等待高手解决。
Super superObj = new superObj();
这行代码根本就不能编译通过!
Private成员 默认的成员 Protected成员 Public成员
同一类中可见 是 是 是 是
同一个包中对子类可见 否 是 是 是
同一个包中对非子类可见 否 是 是 是
不同包中对子类可见 否 否 是 是
不同的包中对非子类可见 否 否 否 是
您的说法错误你可以自己试下
父类写在一个包里子类写在另一个包 import这个父类,并且继承父类结果是可以调用父类的protected成员的
而且在c++中 protected的定义就是在 本类和子类可访问 其他类是不能访问的
Sub subObj = new Sub();
System.out.println(subObj.i);
这里访问的i不是父类中的i,是继承而来的子类中的i
parent类中的protected属性加上Public试试!