我如何在java中使用super?

时间:2011-08-30 16:16:52

标签: java

public class A {

public void foo() {
System.out.println("A's foo");
    }
}



public class B extends A {
    public void foo() {
    System.out.print("B's foo");
    }
}



public  class Test1 {
public static void main(String[] args){
    A a= new B();
    a.foo();
  }
}

我想使用A的foo,这样做的语法是什么?我试过a.super.foo();

谢谢

5 个答案:

答案 0 :(得分:5)

您只能在班级B内执行此操作。您将无法从Afoo个课程外调用A的{​​{1}}。

B会始终将引用A a= new B();设置为a的实例。因此,即使您将其强制转换为B,在运行时调用的方法也是A。这是运行时多态性。

答案 1 :(得分:2)

我对一个需要做这种事情的设计感到非常不安。如果您希望对象的行为类似于A,为什么要创建B

您不能在课堂外使用super。假设你真的真的需要这个(但我真的怀疑你找不到更好的方法)你可以做的最好的事情是暴露一个方法来做到这一点打电话到外面:

public class B extends A {
    public void super_foo() {
        super.foo();
    }
    public void foo() {
        System.out.print("B's foo");
    }
}

public  class Test1 {
    public static void main(String[] args){
        A a= new B();
        a.super_foo();
    }
}

答案 2 :(得分:1)

这是

    public class A {

    public void foo() {
    System.out.println("A's foo");
        }
    }



    public class B extends A {
        public void foo() {
        super.foo();
        System.out.print("B's foo");
        }
    }



public  class Test1 {
public static void main(String[] args){
    A a= new B();
    a.foo();
  }
}

答案 3 :(得分:1)

如果方法是静态的,您想要实现的内容将起作用。 Non virtual methods in java

public class A {
    public static void foo() {
        System.out.println("A's foo");
    }
}

public class B extends A {
    public static void foo() {
        System.out.print("B's foo");
    }
}

public  class Test1 {
    public static void main(String[] args){
       A a= new B();
       a.foo();
    }
}

答案 4 :(得分:1)

您无法访问它。该关键字是由Java 重写所以它不再可访问。