我想知道是否有在Java语言的特征,其中一个超类的方法将是一个子类的成员无形:Java中受保护的类结构?
public class Subclass extends protected Superclass
什么的。我会举一个例子。
这是你的超类。
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){...}
}
如果您想子类,同时保护了它的一些方法,除非你覆盖它们不能在方法更改访问modifyers,你会最终像这个 -
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){...}
}
如果不是这样,你可以保持的私有实例,有这样的事情:
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){...}
}
你能有什么事情,都需要在你没有重新声明任何方法的方法吗?
+1与C++(具有保护和私有继承)进行比较。 – 2009-04-11 22:29:12
当我用来教高级C++时,我用绘制维恩图来显示子类型关系,并显示子类内部和外部所见的内容,发现它非常有效地展示这个概念。但是,我觉得这往往是比它值得的更麻烦。 – Uri 2009-04-11 22:31:31