代码之家  ›  专栏  ›  技术社区  ›  Christian

Java继承附加函数而不是覆盖函数

  •  1
  • Christian  · 技术社区  · 14 年前
    public class Cls1{
        public foo(){
            doX();
        }
    }
    
    public class Cls2{
        public foo(){
            doY();
        }
    }
    
    Cls2 cls = new Cls2();
    cls.foo();
    

    6 回复  |  直到 14 年前
        1
  •  5
  •   Jim Garrison    14 年前

    是的,但你必须明确地做到:

    public class Cls1{
        public foo{
            doX();
        }
    }
    
    public class Cls2 extends Cls1 {
        public foo{
            super.foo();
            doY();
        }
    }
    

    注意:我想您的意思是让Cls2扩展Cls1,否则您的问题就毫无意义了。

        2
  •  3
  •   pablochan    14 年前
    public class Cls1 {
        public foo{
            doX();
        }
    }
    
    public class Cls2 extends Cls1 {
        public foo{
            super.foo();
            doY();
        }
    }
    
    Cls2 cls = new Cls2();
    cls.foo();
    
        3
  •  1
  •   Viele    14 年前
    private class Cls2 extends Cls1 {      
        public void foo {
            doY();
            super.foo();
        }
    }
    
        4
  •  1
  •   tlayton    14 年前

    首先,我想你的意思是:

    public class Cls2 extends Cls1{
    

    是的,有:

    public (something?) foo(){
        super.foo();
        doY();
    }
    

    super关键字允许访问超类的方法。如果只是单独调用:

    super(...);
    

    然后它调用超类的构造函数。

        5
  •  0
  •   Donnie    14 年前

    Cls1 Cls2 以某种方式相互继承,可以使用关键字 super 例如,如果希望在派生类中执行这两个函数,则调用方法的超类实现。

        6
  •  0
  •   Robert Cooper    14 年前

    如果doX()和doY()是静态导入的(因为它们没有在Cls1或Cls2中定义,这是我能想到的编译这个程序的唯一方法),那么您可以用foo方法创建一个新类,该方法调用doX和doY而不使用继承。然而,那些名为foo的方法彼此之间没有任何关系。