Java 为什么我可以从内部类继承final方法?
我发现编译了以下代码:Java 为什么我可以从内部类继承final方法?,java,inheritance,private,inner-classes,final,Java,Inheritance,Private,Inner Classes,Final,我发现编译了以下代码: class Ideone { public static void main (String[] args){ new Ideone().m(); } final private void m(){ System.out.println("private final method"); } class A extends Ideone{ public void method(
class Ideone
{
public static void main (String[] args){
new Ideone().m();
}
final private void m(){
System.out.println("private final method");
}
class A extends Ideone{
public void method(String [] args){
m();
}
}
}
然后执行
我很想知道这件事
你能解释一下为什么java DesignerFounders让它工作吗?不管子类在父类之外还是在父类之内,最终的方法都可以被子类继承。但是不能重写子类中的最后一个方法。如果final方法是private,则除非您的子类位于父类内(如示例中所示),否则无法在子类中继承该方法。因为您将该方法声明为private,那么final无效,并且是多余的 重写私有方法实际上没有多大意义 调用一个类中的私有方法与调用同一个类中可能是公共的另一个方法没有什么不同。这是为了使代码更具可读性和方法的大小更易于管理而经常做的事情 我不认为这是一个愚蠢的问题: 以构建器模式为例。它使用私有构造函数来确保以正确的方式构造类。因此,了解您在不同范围内的可用内容以及为什么重要:
class Ideone {
private String m;
private Ideone(String m) {
System.out.println("Build me with: " + m);
this.m = m;
}
public String getM() {
return m;
}
static class IdeoneBuilder{
String m;
public IdeoneBuilder withM(String m) {
this.m = m;
return this;
}
public Ideone build() {
return new Ideone(this.m);
}
}
public static void main (String[] args){
// new Ideone(); // will not compile
Ideone ideone = new IdeoneBuilder()
.withM("test").build();
}
}
编辑:你可以让Ideone类成为最终版本,它仍然有效。而且你也使得它不可能子类化。换句话说,除非使用反射,否则必须确保除了使用生成器之外,没有其他方法来构造类的对象 没有什么问题;最后的意思是不要重写我,不要继承我你可以调用私有方法Ideonem,因为类A在类Ideone的范围内。不确定这是否是您的意思?如果您担心的是私有方法,那么顶级类声明中的所有代码都可以访问私有方法,包括嵌套类声明中的代码。对不起,这是个愚蠢的问题。不幸的是,我无法删除它