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();
。
谢谢
答案 0 :(得分:5)
您只能在班级B
内执行此操作。您将无法从A
或foo
个课程外调用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 重写所以它不再可访问。