Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的参数执行哪种方法?_Java_Inheritance - Fatal编程技术网

Java 使用不同的参数执行哪种方法?

Java 使用不同的参数执行哪种方法?,java,inheritance,Java,Inheritance,总的来说,为什么这是一个有效的代码?它会不会在静态类型上查找punch(蝙蝠侠b)函数,即Superhero,因为没有与签名完全匹配的函数,这不是编译时错误吗?根据它所做的,它在Superhero类上执行punch(Superhero a) 这导致 public class Superhero { String s; public Superhero() { s = "I'M A SUPERHERO"; System.out.println(s);

总的来说,为什么这是一个有效的代码?它会不会在静态类型上查找
punch(蝙蝠侠b)
函数,即
Superhero
,因为没有与签名完全匹配的函数,这不是编译时错误吗?根据它所做的,它在Superhero类上执行
punch(Superhero a)

这导致

public class Superhero {
    String s;
    public Superhero() {
        s = "I'M A SUPERHERO";
        System.out.println(s);
    }

    public void punch() {
        System.out.println("Punch! Punch!");
    }

    public void punch(Superhero a) {
        System.out.println("BOOM" + s);
    }
}
public class Batman extends Superhero {
    String s;
    public Batman() {
       s = "NANANANANA";
    }

    public Batman(String s) {
           this.s = s;
       System.out.println(this.s);
    }

    public void punch(Superhero v) {
        s = "BATMAN!";
        super.punch(v);
        System.out.println("BOOM " + s);
    }

    public void punch(Batman b) {
        System.out.println("Wat.");
    }

    public static void main(String[] args) {
        Superhero superhero = new Batman();
        superhero.punch( (Batman) superhero);
    }
}

蝙蝠侠是一个超级英雄,因此
公共无效穿孔(超级英雄a)
完全可以使用蝙蝠侠参数调用


为了澄清,
public void punch(Superhero a)
声明可以使用任何类型的Superhero对象调用punch方法。由于所有超级英雄的子类本身都是超级英雄,因此此方法可以将任何超级英雄或任何超级英雄的子类型作为参数。

讽刺的是,小丑回答了超级英雄的问题:)小心!你的变量
s
Batman
shadows
s
Superhero
中。
"I'M A SUPERHERO"
"BOOM I'M A SUPERHERO"
"BOOM BATMAN!