在继承概念中,我在超类中有一个静态方法,我将该类继承到一个子类。在这种情况下,静态方法是否继承到子类?
答案 0 :(得分:8)
请记住,静态方法不是实例方法 - 它们与类有关,而与实例无关。由于派生类可以被认为是基类型,因此可以通过派生类型访问静态方法。
假设:
class A {
public static void foo(){}
}
class B extends A {
}
然后:
B.foo(); // this is valid
答案 1 :(得分:2)
等等,我站得住了 - 静态方法继承了。有点。但是,它们不像真正的OO继承那样行事。例如,使用这些类:
public class Parent {
public static void printIt() {
System.out.println("I'm Parent!");
}
}
public class Child extends Parent {
public static void printIt() {
System.out.println("I'm Child!");
}
public static void main(String[] args) {
Parent child1 = new Child();
Child child2 = new Child();
child1.printIt();
child2.printIt();
}
}
如果您致电child1.printIt()
,则会使用Parent.printIt()
,因为child1已投放到Parent
班级。但是,如果您拨打child2.printIt()
,则会使用Child.printIt()
,因为它会投放给孩子。所以它不是真正的继承,因为如果你转换为超类型,则重写不会坚持。因此,它不是真正的多态性。
答案 2 :(得分:2)
它是继承的,因为它可以作为任何子类的静态方法访问
你为什么不亲自尝试?
class A
staticMethod()
class B extends A
B.staticMethod()
答案 3 :(得分:1)
如果该方法在超类中是public static或protected static,则可以在子类中访问它。所以在这个意义上它是继承的。下面的代码将编译并运行正常。
public class A {
public static String foo() {
return "hello world";
}
}
public class B extends A {
public void bar() {
System.out.println(foo());
}
}
然而,这是对“继承”一词的错误使用,因为它与特定实例无关 - 因此Kaleb的回答。正常的OO设计不会将静态方法视为继承的,并且它会变得非常混乱,尤其是当您开始讨论覆盖它们时。
答案 4 :(得分:0)
父静态方法可以在子类中访问,但不能覆盖。
答案 5 :(得分:0)
是的,您可以继承静态方法。 但是,如果您的静态方法具有私有访问修饰符,则无法继承它
答案 6 :(得分:0)
您可能会关注的另一个(高级)概念是“后期静态绑定”的概念 - 覆盖子类中的静态函数。以下是来自PHP世界的问题,但它适用于所有问题:When would you need to use late static binding?