我想知道 Java 中是否有一种语言特性,其中父类(super class)的方法对于子类的成员是不可见的:
public class Subclass extends protected Superclass
什么的。我举个例子。
这是你的父类(super class)。
public class A{
public String getA(){...}
public String getB(){...}
public String getC(){...}
public void setA(String a){...}
public void setB(String b){...}
public void setC(String c){...}
}
如果您想在保护 A 的某些方法的同时子类化 A,并且您不能更改方法中的访问修饰符,除非您覆盖它们,您最终会得到类似这样的结果-
public class B extends A{
private String getA(){return super.getA();}
private String getB(){return super.getB();}//These four methods have
private void setA(String a){super.setA(a);}//to be redeclared.
private void setB(String b){super.setB(b);}
public String getC(){return super.getC();}//These two methods can be
public void setC(String c){super.setC(c);}//removed.
public String getD(){...}
public void setD(String d){...}
}
或者你可以保留 A 的私有(private)实例并拥有类似这样的东西:
public class B{
private A obj;
private String getA(){return obj.getA();}
private String getB(){return obj.getB();}//These four methods can also
private void setA(String a){obj.setA(a);}//be removed.
private void setB(String b){obj.setB(b);}
public String getC(){return obj.getC();}//These two methods are
public void setC(String c){obj.setC(c);}//redeclared.
public String getD(){...}
public void setD(String d){...}
}
您能否以一种不需要重新声明任何方法的方式同时接受这两种方法?
最佳答案
与 C++ 中的情况不同,Java 中没有“非公共(public)”继承。
继承创建子类型关系。 B 的任何实例也是 A 的实例,并且应该响应相同的消息。如果 B 的实例显然不响应 A 的实例响应的所有消息,那么无论如何继承都是不合适的。
您的最后一个解决方案(B 不继承自 A)是合适的解决方案:您不创建子类型化关系,只需使用一种类型( secret 地)实现另一种。
关于java - Java中 protected 类结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740873/