【问题标题】:Java and skipping a level with super [duplicate]Java和用super跳过一个级别[重复]
【发布时间】:2011-09-15 18:58:01
【问题描述】:

可能重复:
Why is super.super.method(); not allowed in Java?

如果你有一个派生自另一个类的类,那么我是否可以调用 super.super 方法而不是被覆盖的方法?

class A{
    public void some(){}
} 

class B extends A{
    public void some(){}
} 

class C extends B{
    public void some(){I want to call A.some();}
} 

【问题讨论】:

    标签: java


    【解决方案1】:

    @tgamblin 是对的,但这里有一个解决方法:

    class A{
        public void some(){ sharedCode() }
        public final void someFromSuper(){ sharedCode() }
    
        private void sharedCode() { //code in A.some() }
    } 
    
    class B extends A{
        @Override
        public void some(){}
    } 
    
    class C extends B{
        @Override
        public void some(){
         //I want to call A.some();
         someFromSuper();
        }
    } 
    

    在 A 中创建您的方法的第二个版本,它是最终版本(不可覆盖)并从 C 中调用。

    这实际上是一个糟糕的设计,但有时需要并在 JDK 内部使用。

    问候, 斯蒂芬

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      相关资源
      最近更新 更多