如何在java中使用super?
我想使用A的foo,它的语法是什么?我试过如何在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.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
。哦,我以为你想同时打印这两个。哦,我以为你想同时打印这两个。