package Greek;
public class Alpha
{
protected int iamprotected;
protected void protectedMethod()
{
System.out.println("protectedMethod");
}
} package Greek;
class Gamma
{
void accessMethod()
{
Alpha a = new Alpha();
a.iamprotected = 10; // legal
a.protectedMethod(); // legal
}
} package Latin;
import Greek.*;
class Delta extends Alpha
{
void accessMethod(Alpha a,Delta d)
{
a.iamprotected = 10; // illegal
d.iamprotected = 10; // legal
a.protectedMethod(); // illegal
d.protectedMethod(); // legal
}
}
为什么 上面的 a.iamprotected=10 和 a.protectedMethod是不合法的??而用d调用又可以??? protected,private的特点请高手说下,谢谢
public class Alpha
{
protected int iamprotected;
protected void protectedMethod()
{
System.out.println("protectedMethod");
}
} package Greek;
class Gamma
{
void accessMethod()
{
Alpha a = new Alpha();
a.iamprotected = 10; // legal
a.protectedMethod(); // legal
}
} package Latin;
import Greek.*;
class Delta extends Alpha
{
void accessMethod(Alpha a,Delta d)
{
a.iamprotected = 10; // illegal
d.iamprotected = 10; // legal
a.protectedMethod(); // illegal
d.protectedMethod(); // legal
}
}
为什么 上面的 a.iamprotected=10 和 a.protectedMethod是不合法的??而用d调用又可以??? protected,private的特点请高手说下,谢谢
访问权限问题,我没有用熟,你可以去看看,权限修饰哪一块
但是PROTECETD这个访问限制是不是对不同的包限制了不可以访问你就看看书了好,
同个包中是可以访问的.
默认没有修饰的,在本包内能访问。
private的,本类外都不能访问。 楼主的问题void accessMethod(Alpha a,Delta d) //这里的a你是通过引用的方式引入Alpha类
{ //而不是继承,所以无法访问
a.iamprotected = 10; // illegal //d能访问是因为d继承了Alpha类
d.iamprotected = 10; // legal
a.protectedMethod(); // illegal
d.protectedMethod(); // legal
}
}