1、当不同包中的不同类且他们之间没有继承关系时,一个类只能获得另一个的由public修饰的成员,且这个类必须是由public修饰的,如果没有修饰将无法获得类中的任何属性
例如class A{ }和public class B{} 且他们是不同包中的类,A可以获得B中由public修饰的成员但是B不能获得A中由public修饰的成员
2、不同包中的不同类且他们之间存在继承关系,那么子类可以访问父类由public和protected修饰的成员,并且父类必须是由public修饰的,但只能在子类内部访问父类的protected成员,且用super调用,如果在其他类(同一个包中的)中创建这个子类那么只能访问到此子类的父类中的public成员,当父类中由构造函数定义构造函数时最低权限是protected,否则子类编译不能通过
例如在一个包中有类A如下
public class A{//这个类必须是public否则子类无法访问
int a=1;//定义友好变量
protected int b=1;//定义保护变量
public int c;//定义公有变量
private int d;//定义私有变量
protected A(int a){}//这个地方的属性最低是protected否则子类无法获得构造函数而编译出错
void run()1{ }//定义友好方法
protected void run()2{}//定义保护方法
public void run()3{}//定义公有方法
private void run()4{}//定义私有方法
}
在另一个包中
class C{
new B().b;//这句是错误的,以为再别的类中只能访问到父类中的public成员
}
class B extends A{
B(int a){
super(a);
super.b;//这句是没有语法错误的,但是在c类中调用b就会出错
} //子类中可以不加protected和public编译不会出错
}
3、在同一个包中的不同类且他们没有继承关系,那么一个类可以访问到另一个类除私有成员以外其他所有成员,且此时的父类可以不加public修饰。
4、在同一个包中存在继承关系的类和第三种是一样的。
5、同一个可以访问所有成员
对于此问题主要问题就在第二个上,因为继承和你继承的有出入,且继承的在其他类创建对象只能获得父类中的public成员,其他的到没有什么。