Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何创建一个成员,该成员应该只对java中的子类可用?_Java_Scope_Parent Child_Subclass_Access Modifiers - Fatal编程技术网

我如何创建一个成员,该成员应该只对java中的子类可用?

我如何创建一个成员,该成员应该只对java中的子类可用?,java,scope,parent-child,subclass,access-modifiers,Java,Scope,Parent Child,Subclass,Access Modifiers,我如何创建一个成员,该成员应该只对java中的子类可用? 假设您的子类是子类,则它们可以访问任何public变量。如果您希望从子类访问private变量,则必须将它们更改为protected,假设您说的是“variable”,您指的是某个类的成员。例如: class Parent { SomeType myVariable; ... } 假设当你说我的子类时,你在谈论Java中的extends关系。例如: class Child extends Parent { ...

我如何创建一个成员,该成员应该只对java中的子类可用?

假设您的子类是子类,则它们可以访问任何
public
变量。如果您希望从子类访问
private
变量,则必须将它们更改为
protected

,假设您说的是“variable”,您指的是某个类的成员。例如:

class Parent {
    SomeType myVariable;
    ...
}

假设当你说我的子类时,你在谈论Java中的
extends
关系。例如:

class Child extends Parent {
    ...
}
在这种情况下,你不能完全得到你想要的,但也许你可以得到你需要的

如果声明该成员受
保护
,则该成员在任何子类中都可见,但在属于同一包的任何其他类中也可见,无论该其他类是否为子类

class Parent {
    protected SomeType myVariable;
    ...
}

依我看,
受保护的
没有多大用处。这是一个建议,其他程序员不应该尝试在一个不从父类继承的类中使用它,但那又怎样呢

如果您在某个类中看到一个
private
成员,那么您可以确信,您看到的源文件之外的任何代码都不可能依赖于它

如果您看到具有默认访问权限的成员(即既不是
public
,也不是
private
,也不是
protected
),则您知道依赖它的任何代码都必须在同一个包中声明。没有什么能阻止世界上其他地方的程序员在您的包中声明自己的代码,但如果他/她这样做,那么他/她就是愚蠢的,当您发布一个破坏他/她的应用程序的新版本时,这不是您的问题


如果您看到一个成员具有
公共
受保护的
访问权限,那么您必须假设您不认识的人和您永远不会遇到的人都依赖于您不更改它。

考虑到您知道要使用哪些标记,问题是什么?这是一张很好的表格,供将来参考。谢谢你的回复。我很想知道,有没有办法让成员只对子类可见?@Rajesh,没有。最接近的方法是声明变量
protected
public class P
中的
protected
变量可以在同一个包中声明的任何类中看到,也可以在任何
class P
中看到,无论包是什么。感谢您的回复。我很想知道,有没有办法让成员只对子类可见?@Rajesh,这不是同一个问题吗?是,使用
受保护的
。包中的所有类别都可以看到受保护的。我不想那样。成员应该“仅对子类可见”。如果不使其对包类不可见,则无法使其对子类可见。但是你可以用你喜欢的方式来管理你的包,例如,只在包中放一些子类。谢谢谢谢你的回复。这看起来和我要找的很接近。但是我猜我们也可以不用静电。
class Parent {
    protected SomeType myVariable;
    ...
}