小编Egg*_*ans的帖子

是什么决定是应该调用静态方法还是对象方法

只是一个普通的查询是由某人意外地给一个类的变量赋予一个名称,该名称与另一个类匹配,其中两个类都有一个同名的方法,其中一个是静态的.

鉴于以下内容:

public class A {
    public static String dothis(String string){
        return "Class";
    }

    public static String dothis(String string, String string2){
        return "Class Method 2";
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个

public class B {    
    public String dothis(String string){
        return "Object";
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦对象被实例化,以下是否总是调用对象而不是静态方法?

System.out.println(A.dothis("..."));//outputs Class
B A = new B();
System.out.println(A.dothis("..."));//outputs Object
Run Code Online (Sandbox Code Playgroud)

实例化后的Nb似乎不可能在A类中调用任何静态方法,即

B A = new B();
System.out.println(A.dothis("..."));
System.out.println(A.dothis("...","..."));//Won't compile
Run Code Online (Sandbox Code Playgroud)

上面不会编译抱怨错误的树型,

编辑:添加了特定的例外: -

java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
    at testbed.....
Run Code Online (Sandbox Code Playgroud)

...这是否意味着编译器有效地决定调用哪个方法,因此差异javac版本的行为可能会有所不同.

这里发生了什么,如果这有保证,它可以用于某种方式的混淆,还是反编译会删除名称冲突?

java

3
推荐指数
1
解决办法
120
查看次数

标签 统计

java ×1