Java重写方法
我在Java重写中有点混乱。假设我们有以下继承:Java重写方法
class A{
public A(){
}
void show(){
System.out.println("SuperClass");
}
}
class B extends A{
@Override
void show(){
System.out.println("SubClass");
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
b.show();
}
}
显然,class B
覆盖了由该class A
继承的方法show()
。为什么不b.show();
打印信息System.out.println("SuperClass");
以及因为class B
现在有方法show()
从class A
?
谢谢。
B类的show
方法覆盖A级的表演方法,并且不会调用它,所以没有理由System.out.println("SuperClass");
当你调用show
上B.
的实例,如果你改变要被执行类B到:
class B extends A
{
@Override
void show(){
super.show();
System.out.println("SubClass");
}
}
调用B的一个实例show
也将执行A
的展示方法的逻辑。
在类B
中你是压倒一切的,换句话说代替原来实施的show()
方法。每当您调用show()
的对象是instanceof B
该方法的版本将被调用。
参考原始show()
方法的唯一方法是使用B
中的super.show()
语法或其他任何延伸为A
的类来引用它。
并且作为附加说明,该注释仅用于添加其他编译器检查,但不需要实际覆盖某个方法,您只需要按照B
中的方法重新实现它即可。
它的多态性行为,即对方法体的方法调用发生在运行时,即当JVM调用B b = new B();所以B对象是类B的类型,所以如果你在B()的构造函数中加入super(),你可以得到父类的方法,所以它显示B的方法被覆盖。
这是重写继承的效果。你只需从超类中取代方法(但你仍然可以到达旧方法!)在这里我也添加了一点多态性。希望这会帮助你。
class A{
public A(){
}
void show(){
System.out.println("SuperClass");
}
}
class B extends A{
void superclass() {
super.show();
}
@Override
void show(){
System.out.println("SubClass");
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
b.show(); //SubClass
b.superclass(); //SuperClass
A a = new A();
a.show(); //SuperClass
A c = new B();
c.show(); //SubClass
//c.superclass(); //error! the program won't compile
}
}
使它成为//c.superclass();错误!该程序不会编译 – Palak
好的,完成。谢谢! –
如果是的话,重写方法会有什么意义? –
@ sp00m那种。该方法仍然存在,但您可以通过'super'访问它。 – aruisdante
你好迈克与继承关系,其多态行为,即方法体的方法调用发生在运行时,即当jvm调用B b = new B();所以B对象是类B的类型,所以它显示B的方法的方法被覆盖1,如果你把super()你可以得到一个父类。 – Kogile