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);
}