为什么输出第一个字符串为NULL?

public class Hero{
String name;
String name1;
public void kill(Mortal m) {
m.die();
}
public static void main(String[] args) {
Hero h = new Hero();
h.name="盖伦";
ADHero ad = new ADHero();
ad.name1="提莫";
h.kill(ad);
}

}

public class ADHero extends Hero implements Mortal {

@Override
public void die() {
    System.out.println(name+name1);
}

}

public interface Mortal {
public void die();
}

使用过super关键字调用父类的name,但是还是输出NULL,请大佬帮助解释一下。

简而言之一句话,你没有进行 ad.name的赋值,只进行了ad.name1的赋值,新手吧?
图片说明

楼上正解,非常清晰,画图确实一目了然

你这个例子挺好的,挺考验基础的。原因楼上的图已经说明了,如果你要是想正确输出的话建议你像下面这样写。

class Hero{
    static String name;
    static String name1;
    private void kill(Mortal m) {
        m.die();
    }
    public static void main(String[] args) {
        Hero.name="盖伦";
        ADHero.name1="提莫";
        Hero h = new Hero();
        ADHero ad = new ADHero();
        h.kill(ad);
    }

}
class ADHero extends Hero implements Mortal {

    @Override
    public void die() {
        System.out.println(name+name1);
    }
}
interface Mortal {
    void die();
}

你自己把对象弄混淆了,楼上都是正解

一个对象不应该有两个名字

class Hero{
    String name;
    private void kill(Mortal m) {
        m.die(name);
    }
    public static void main(String[] args) {
        Hero h = new Hero();
        h.name="盖伦";
        ADHero ad = new ADHero();
        ad.name="提莫";
        h.kill(ad);
    }

}
class ADHero extends Hero implements Mortal {

    @Override
    public void die(String killer) {
        System.out.println(killer+"击杀了"+name);
    }
}
interface Mortal {
    void die(String killer);
}