相关疑难解决方法(0)

静态类和单例模式之间的区别?

静态类和单例模式之间存在什么真实(即实际)差异?

两者都可以在没有实例化的情况下调用,两者都只提供一个"实例",它们都不是线程安全的.还有其他区别吗?

singleton static design-patterns

1708
推荐指数
21
解决办法
48万
查看次数

为什么静态方法在Java中不能是抽象的

问题是在Java中为什么我不能定义一个抽象的静态方法?例如

abstract class foo {
    abstract void bar( ); // <-- this is ok
    abstract static void bar2(); //<-- this isn't why?
}
Run Code Online (Sandbox Code Playgroud)

java abstract-class static-methods

572
推荐指数
8
解决办法
26万
查看次数

从常规ES6类方法中调用静态方法

调用静态方法的标准方法是什么?我可以考虑使用constructor或使用类本身的名称,我不喜欢后者,因为它没有必要.前者是推荐的方式,还是还有其他的东西?

这是一个(人为的)例子:

class SomeObject {
  constructor(n){
    this.n = n;
  }

  static print(n){
    console.log(n);
  }

  printN(){
    this.constructor.print(this.n);
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript static class ecmascript-6 es6-class

161
推荐指数
3
解决办法
10万
查看次数

我可以在Java中覆盖和重载静态方法吗?

我想知道:

  1. 为什么不能在Java中覆盖静态方法?
  2. Java中是否可以重载静态方法?

java static overriding overloading

58
推荐指数
5
解决办法
20万
查看次数

为什么在null引用上调用(静态)方法不会抛出NullPointerException?

我用Java编写了这个程序

public class Why {

  public static void test() {
    System.out.println("Passed");
  }

  public static void main(String[] args) {
    Why NULL = null;
    NULL.test();
  }

}
Run Code Online (Sandbox Code Playgroud)

我读到调用一个null对象的方法导致NullPointerException,但上面的程序没有?为什么是这样?我不正确地理解某事吗?

java null static nullpointerexception

49
推荐指数
1
解决办法
9709
查看次数

覆盖python中的静态方法

在这里参考关于python的绑定和未绑定方法的第一个答案,我有一个问题:

class Test:
    def method_one(self):
        print "Called method_one"
    @staticmethod
    def method_two():
        print "Called method_two"
    @staticmethod
    def method_three():
        Test.method_two()
class T2(Test):
    @staticmethod
    def method_two():
        print "T2"
a_test = Test()
a_test.method_one()
a_test.method_two()
a_test.method_three()
b_test = T2()
b_test.method_three()
Run Code Online (Sandbox Code Playgroud)

产生输出:

Called method_one
Called method_two
Called method_two
Called method_two
Run Code Online (Sandbox Code Playgroud)

有没有办法在python中覆盖静态方法?

我希望b_test.method_three()打印"T2",但它没有(打印"Called method_two"代替).

python static overriding

46
推荐指数
1
解决办法
2万
查看次数

Smalltalk和Java中的OO有哪些主要区别?

Smalltalk和Java中的OO有哪些主要区别?

请注意,我是一名Java程序员,试图通过探索Smalltalk来扩展他的视野.目前我对Smalltalk几乎一无所知,只不过它比Java更纯净.因此,我更喜欢这个答案,它展示了各种Java概念如何映射到相应的Smalltalk概念,然后介绍了Java中根本不存在的Smalltalk概念.

java oop programming-languages smalltalk

38
推荐指数
7
解决办法
1万
查看次数

为什么单例对象更面向对象?

Scala编程:综合循序渐进指南中,作者说:

Scala比Java更面向对象的一种方式是Scala中的类不能有静态成员.相反,Scala具有单例对象.

为什么单例对象更面向对象?不使用静态成员有什么好处,而是使用单例对象?

scala

35
推荐指数
3
解决办法
3498
查看次数

当我尝试覆盖静态方法时,为什么编译器没有抱怨?

我知道我们不能在Java中覆盖静态方法,但有人可以解释下面的代码吗?

class A {
    public static void a() { 
        System.out.println("A.a()");
    }
}   

class B extends A {
    public static void a() {
        System.out.println("B.a()");
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能a()在课堂上覆盖方法B

java static-methods overriding

34
推荐指数
3
解决办法
3万
查看次数

为什么Java为重写的静态方法强制执行返回类型兼容性?

根据这个答案答案,Java静态方法不是虚拟的,不能被覆盖.因此,直观地说,这应该有效(即使在99%的情况下,这是危险的编程):

class Foo
{
    public static String frob() {
        return "Foo";
    }
}

class Bar extends Foo
{
    public static Number frob() {
        return 123;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在实践中,这会让你:

Foo.java:10: frob() in Bar cannot override frob() in Foo; attempting to use incompatible return type
found   : java.lang.Number
required: java.lang.String
    public static Number frob() {
                         ^
Run Code Online (Sandbox Code Playgroud)

天真地,似乎Foo.frob()并且Bar.frob()应该与彼此无关; 然而Java坚持认为他们这样做.为什么?

(Nb:我不想听到为什么以这种方式编码是个坏主意,我想听听Java和/或JVM设计中的内容,这使得这个限制成为必要.)


更新以添加:对于那些认为编译器会因为在实例上调用静态方法而感到困惑的人,如果你允许这样做:它不会.它已经在方法签名的情况下算出这个兼容的:

class Foo
{
    static String frob() {
        return "Foo";
    }
} …
Run Code Online (Sandbox Code Playgroud)

java static overriding

30
推荐指数
1
解决办法
3403
查看次数