我在这里有关于此代码的问题
public Car {
public static void m1(){
System.out.println("a");
}
public void m2(){
System.out.println("b");
}
}
class Mini extends Car {
public static void m1() {
System.out.println("c");
}
public void m2(){
System.out.println("d");
}
public static void main(String args[]) {
Car c = new Mini();
c.m1();
c.m2();
}
}
我知道多态性不适用于静态方法,仅适用于实例方法。而且,对于静态方法而言,覆盖无效。
因此,我认为该程序应打印出来:c,d
因为c调用了m1方法,但是它是静态的,所以它无法覆盖,并且在Mini类而不是Car中调用该方法。
这样对吗?
但是,我的教科书说答案应该是:a,d
是错字吗?因为我现在有点困惑。
请清除此,谢谢。
因为c调用了m1方法,但是它是静态的,所以它无法覆盖,并且在Mini类而不是Car中调用该方法。
那完全是倒退。
c
被 声明 为Car
,因此静态方法调用由通过c
将调用定义的方法Car
。
编译器c.m1()
直接编译为Car.m1()
,而不知道c
实际包含Mini
。
这就是为什么您永远不要通过这样的实例调用静态方法的原因。
我们可以把一个方法赋值给类的函数本身,而不是赋给它的 "prototype"。这样的方法被称为 静态的(static)。 在一个类中,它们以 static 关键字开头,如下所示: class User { static staticMethod() { alert(this === User); } } User.staticMethod(); // true 这实际上跟直接将其
PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti
问题内容: 我有必须从静态方法中使用的服务。我知道这是错误的,但是我无法更改当前的设计,因为这需要大量的工作,因此我需要一些简单的技巧。我不能更改为非静态的,而需要使用此自动装配的bean。有什么线索怎么做? 问题答案: 您可以通过执行以下解决方案之一来做到这一点: 使用构造函数@Autowired 这种方法将构造需要一些bean作为构造函数参数的bean。在构造函数代码中,您可以将静态字段的值设
问题内容: 请参见下面的代码段: 代码1 代码2 这些代码段之间有什么区别?两者都15作为答案输出。 问题答案: 静态方法属于类本身,而非静态(aka实例)方法属于从该类生成的每个对象。如果你的方法执行的操作不依赖于其类的单个特征,请将其设置为静态(这将使程序的占用空间减小)。否则,它应该是非静态的。 例: 你可以像这样调用静态方法:。如果你使用method2尝试该操作,它将失败。但这将起作用:;
我有点困惑。请看看下面的代码。 我确信调用此序列是可能的。 虽然我仍然有一个小小的困惑,但我们可以很容易地看到也调用方法,这是一个静态方法。方法 是调用非同步静态方法的静态同步方法。当 thread-2 获得类级锁时,为什么从 Thread-1 调用 没有被阻止? 我只是在逻辑上感到困惑,如果一个线程获得类级锁定,则该类其他非同步静态方法保持打开状态,以便从其他方法(实例方法)调用。为什么?
rank ▲ ✰ vote url 31 549 117 733 url 静态方法 Python有没有静态方法使我可以不用实例化一个类就可以调用,像这样: ClassName.StaticMethod ( ) 是的,用静态方法装饰器 class MyClass(object): @staticmethod def the_static_method(x): pri