谁能告诉我这里发生了什么事;“受保护”;java中的修饰符 我学到的一点是java中的代码>私下的,其实并不意味着C++中的代码。java中的代码>私有是基于类的,而不是基于对象的。 i、 e我可以使用“对象点表示法”直接访问另一个对象私有成员,前提是我在该对象的类中这样做
然而,谁能告诉我这里发生了什么事;“受保护”;java中的修饰符 我学到的一点是java中的代码>私下的,其实并不意味着C++中的代码。java中的代码>私有是基于类的,而不是基于对象的。 i、 e我可以使用“对象点表示法”直接访问另一个对象私有成员,前提是我在该对象的类中这样做,java,inheritance,protected,Java,Inheritance,Protected,然而,受保护的并不那么清楚。 我们将在这里考虑两个包: PAC1和 PAC2 BR> 我们在pack1package 并在pack2包中声明从pack1扩展而来的Alpha,以及从Alpha扩展而来的Gamma。 ! 这是课程代码,我只在这里包括了与问题相关的课程:Alpha、AlphaSub和Gamma package pack1; public class Alpha{ private int alphaPrivate; public int alphaPublic; pro
受保护的
并不那么清楚。
我们将在这里考虑两个包:<代码> PAC1和pack1
package并在
pack2
包中声明从pack1
扩展而来的Alpha
,以及从Alpha
扩展而来的Gamma
。
!
这是课程代码,我只在这里包括了与问题相关的课程:Alpha
、AlphaSub
和Gamma
package pack1;
public class Alpha{
private int alphaPrivate;
public int alphaPublic;
protected int alphaProtected;
int alphaPP;
protected int alphaProtected(){
return 1;
}
private int alphaPrivate(){
return 1;
}
}
package pack2;
import pack1.Alpha;
public class AlphaSub extends Alpha{
int alphasubPP;
private int alphasubPrivate;
protected int alphasubProtected;
public int alphasubPublic;
public void meth() throws CloneNotSupportedException{
new AlphaSub().alphaProtected(); //OK
new Gamma().alphaProtected(); /*COMPILE ERROR. */
}
}
因此,显然,即使AlphaSub和Gamma都从AlphaSub继承了alphaProtected()
,也不能从AlphaSub调用Gamma继承的alphaProtected()
。。
如果一个类的受保护方法只能从该类内部调用,那么从另一个类调用clone
[由每个类从对象继承的类]难道不可能吗
有人能澄清一下吗 您的经历包括在:
6.6.2.1。访问受保护的成员
设C为声明受保护成员的类。访问权限是
仅允许在C的子类S的主体内使用
此外,如果Id表示实例字段或实例方法,则:
- 如果通过限定名Q.Id或方法引用表达式Q::Id(§15.13)进行访问,其中Q是表达式名,则
当且仅当表达式Q的类型为S时才允许访问
或S的一个子类
- 如果访问是通过字段访问表达式E.Id、方法调用表达式E.Id(…)或方法引用表达式E::
Id,其中E是主表达式(§15.8),则访问
当且仅当E的类型为S或S的子类时才允许
- 如果访问是通过方法引用表达式T::Id进行的,其中T是ReferenceType,那么当且仅当
类型T是S或S的一个子类
如果您替换newgamma().alphaProtected(),那么您是正确的代码>带有新Gamma().clone()代码>,您将得到相同的编译错误。的可能重复项,但我们应该能够调用new Gamma()。从类的主体外部克隆Gamma
,不是吗?否则,克隆
方法对Gamma类有什么重要作用?我认为clone
方法必须在Gamma
中重新定义,才能从外部调用Gamma
,否??请澄清\哦,是的,确实如此。只需在Gamma中重写受保护的方法,它就可以工作!有趣的是,比起教程文档中简单的陈述,还有很多东西