相关疑难解决方法(0)

从静态方法调用超级方法

是否可以从子静态方法调用超静态方法?

我的意思是,以通用的方式,到目前为止,我有以下内容:

public class BaseController extends Controller {
    static void init() {
        //init stuff
    }
}

public class ChildController extends BaseController {
    static void init() {
        BaseController.loadState();
        // more init stuff
    }

}
Run Code Online (Sandbox Code Playgroud)

并且它有效,但我想以通用方式执行它,比如调用super.loadState(),这似乎不起作用......

java inheritance static super

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

静态方法调用

我们可以在不提及Java中的类名的情况下调用静态方法吗?

java syntax static

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

隐藏静态方法在子类中时的签名差异

最近我使用一些简单的Java代码来使用main快速测试我编写的代码的方法.我最终遇到了两个类似的类:

public class A {
    public static void main(String[] args) {
        // code here
    }
}



public class B extends A {
    public static void main(String[] args) throws IOException {
        // code here
    }
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶代码停止编译,Eclipse抱怨说Exception IOException is not compatible with throws clause in A.main(String[]).

好吧,这两个方法都是静态的,而main函数B只是隐藏了一个A,所以我认为它们之间完全没有关系.在静态方法我们没有多态性与呼叫被绑定到编译过程中的具体方法的实现,因此我不明白,为什么mainB不能乱扔未在声明例外main的签名A.

为什么Java设计者决定强制执行这样的约束,如果编译器没有强制执行约束,它会在什么情况下导致问题呢?

java

15
推荐指数
1
解决办法
245
查看次数

为什么我们不能覆盖静态和最终方法?

我试图理解为什么我们不能覆盖静态和最终方法.我没有得到它背后的目的.

java

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

为什么对隐藏的静态方法强制执行返回类型协方差?

由于in 的String返回类型,此代码将无法编译.staticMethodChild

class Parent {
    static void staticMethod() {    
    }
}

class Child extends Parent {
    static String staticMethod() {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道§8.4.8.3中的JLS 8,"覆盖和隐藏的要求"说:

如果具有返回类型R1的方法声明d1覆盖或隐藏具有返回类型R2的另一个方法d2的声明,则对于d2,d1必须是return-type-substitutable(第8.4.5节),否则会发生编译时错误.

我的问题是在静态方法的特定情况下进行编译时检查的动机是什么,这个例子说明在编译期间未能进行此验证会产生任何问题是理想的.

java jls

12
推荐指数
1
解决办法
512
查看次数

抽象基类强制每个派生类为Singleton

如何创建一个抽象类来强制每个派生类为Singleton?我用C#.

c# oop ooad

9
推荐指数
2
解决办法
6882
查看次数

最终和私人静态

我读到了这样做:

public final void foo() {}
Run Code Online (Sandbox Code Playgroud)

等于:

private static void foo() {}
Run Code Online (Sandbox Code Playgroud)

两者都意味着该方法不可覆盖!

但是,如果一个方法是私有的,我自动无法访问,我看不到等价...

java static final private

8
推荐指数
1
解决办法
876
查看次数

在java 7中编译时名称冲突编译错误,但在java 5中工作正常

public interface Expression {

}

public interface ArithmeticExpression extends Expression {

}


public class StaticMethodDemo {
  public static void print(Expression e) {
    System.out.println("StaticMethodDemo");
  }

  public static List<Expression> convert(
        Collection<? extends Expression> input) {
    return null;
 }
}


public class StaticMethodChild extends StaticMethodDemo {

    public static void print(ArithmeticExpression e) {
    System.out.println("StaticMethodChild");
   }

   public static List<ArithmeticExpression> convert(
        Collection<? extends ArithmeticExpression> input) {
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在java 5中编译但在java 7中没有编译为什么?在java 7中,它给出了"Name clash:StaticMethodChild类型的方法convert(Collection)与StaticMethodDemo类型的convert(Collection)具有相同的擦除,但不隐藏它"

java compiler-errors

8
推荐指数
2
解决办法
2736
查看次数

有没有合理的理由隐藏静态方法?

可能重复:
为什么Java不允许覆盖静态方法?

有没有合理的理由为什么人们希望派生类重写隐藏static基类的方法?

java static method-hiding

6
推荐指数
1
解决办法
742
查看次数

为什么我可以重写静态接口方法?

我找不到任何好的来源来解释原因:

abstract class AA {
    public static void log() {}
}

class BB extends AA {
    public void log() {} //error
}
Run Code Online (Sandbox Code Playgroud)
interface CC {
    public static void log() {}
}

class DD implements CC {
    public void log() {} //Ok
}
Run Code Online (Sandbox Code Playgroud)

java methods static interface

6
推荐指数
1
解决办法
4718
查看次数