3

覆盖和阴影之间有什么区别,特别是对于“静态方法不能在子类中覆盖,只能隐藏”这句话

4

2 回答 2

4

如果你真的重写了一个方法,你可以super()在其中的某个时刻调用它来调用超类的实现。但是由于static方法属于一个类,而不是一个实例,因此您只能通过提供具有相同签名的方法来“隐藏”它们。任何类型的静态成员都不能被继承,因为它们必须通过类来访问。

于 2013-06-17T17:43:43.757 回答
1

覆盖...这个术语指的是多态行为,例如

class A {
   method(){...} // method in A
}

class B extends A {
    @Override
    method(){...} // method in B with diff impl.
}

当您尝试从 B 类调用该方法时,您会被覆盖行为 ..eg

A myA = new B();
myB.method();   // this will print the content of from overriden method as its polymorphic behavior

但是假设您使用静态修饰符声明了该方法,而不是尝试相同的代码

A myA = new B();
myA.method();  // this will print the content of the method from the class A

这是因为静态方法不能被覆盖...... B类中的方法只是隐藏了A类的方法......

于 2013-06-17T17:51:03.257 回答