【问题标题】:Why can I inherit final method from inner class?为什么我可以从内部类继承 final 方法?
【发布时间】:2015-06-05 10:21:24
【问题描述】:

我发现以下代码可以编译:

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 设计者(创始人)让它起作用吗?

【问题讨论】:

  • 没有错; m 未被覆盖。
  • final 表示不要覆盖我,而不是不要继承我
  • 您可以调用 private 方法Ideone#m(),因为类A 在类Ideone 的范围内。不确定这是否是您的意思?
  • 如果你担心的是private - 顶级类声明中的所有代码都可以访问private 方法,包括嵌套类声明中的代码。
  • 对不起,愚蠢的问题。不幸的是,我无法删除它

标签: java inheritance private inner-classes final


【解决方案1】:

无论子类在父类之外还是在父类内部,子类都可以继承final方法。但是您不能覆盖子类中的 final 方法。如果最终方法是私有的,则除非您的子类在父类中(如您的示例中),否则您不能在子类中继承该方法。

【讨论】:

    【解决方案2】:

    既然你把方法声明为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 类设为 final,它仍然可以工作。而且您还无法对其进行子类化。换句话说,您确保除了使用构建器(除非使用反射)之外没有其他方法可以构造您的类的对象。

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多