如何在java中使用super?

如何在java中使用super?,java,Java,我想使用A的foo,它的语法是什么?我试过a.super.foo() 谢谢您只能在类B中执行此操作。您将无法从A或B类外部调用A的foo A A=新B()将始终将引用a设置为B的实例。因此,即使将其强制转换为A,在运行时调用的方法也是B.foo。这就是运行时多态性。您只能从类B中执行此操作。您将无法从A或B类外部调用A的foo A A=新B()将始终将引用a设置为B的实例。因此,即使将其强制转换为A,在运行时调用的方法也是B.foo。这就是运行时多态性。我真的对需要做这种事情的设计感到不安。如果

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


谢谢

您只能在类
B
中执行此操作。您将无法从
A
B
类外部调用
A
foo


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

您只能从类
B
中执行此操作。您将无法从
A
B
类外部调用
A
foo


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

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

您不能从类外使用
super
。假设您真的非常需要它(但我真的怀疑您找不到更好的方法),那么您最好将执行此调用的方法公开给外部:

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
,为什么要创建
B

您不能从类外使用
super
。假设您真的非常需要它(但我真的怀疑您找不到更好的方法),那么您最好将执行此调用的方法公开给外部:

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();
  }
}
给你

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();
    }
}
给你

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();
    }
}

如果方法是静态的,那么您想要实现的将起作用


如果方法是静态的,那么您想要实现的将起作用


你无法访问它。关键字是它已被Java覆盖,因此不再可访问。

您无法访问它。关键字是它已被Java覆盖,因此不再可访问。

类难道不应该比调用方更清楚它的foo方法的作用吗?super一词是从类内部使用的。不是从外部。难道类不应该比调用方更清楚它的foo方法做什么吗?super这个词是从类内部使用的。不是从外部。所以基本上你是说,只要B类本身有一个“foo”,我就不能通过使用B的实例来使用A的foo?是的。只要
B
覆盖
A.foo
,就不能通过使用
B
的实例来调用
A.foo
。所以基本上你是说,只要B类本身有一个“foo”,我就不能通过使用B的实例来使用A的foo?是的。只要
B
覆盖
A.foo
,就不能使用
B
的实例调用
A.foo
。哦,我以为你想同时打印这两个。哦,我以为你想同时打印这两个。