新手刚写了关于理解继承的小程序,有点搞不懂就问了一下。
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();
}
程序的出现的问题是输出的name始终是NULL
大佬解答之后是ad.name没有赋值,这是大佬画的图
ADHero继承了Hero,但是不使用特殊方法如super 关键字调用父类的name,name执行的仍然是ADHero的name和name1,。简单的问题搞的模模糊糊,继续加油!
下面是简单的改正方法。希望大佬请教。
其他不变,只修改了Hero 类
public class Hero{
static String name;
static String name1;
public 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);
}
}
将属性改为静态类型供整个类使用是其中一种
下面是传参数用super的方法
package com.ligong.text;
public class Main {
public static void main(String[] args) {
Hero h=new Hero();
ADHero ad=new ADHero();
ad.name="提莫";
ad.getSonName();
h.kill(h, ad);
}
}
public class ADHero extends Hero implements Mortal {
String name;
public String getName() {
return super.name;
}
public void getSonName() {
System.out.println("1"+this.name);
}
@Override
public void die(Hero h) {
System.out.println("2"+getName());
}
}
public class Hero {
String name;
Hero(){
this.name="盖伦";
}
public void kill(Hero h,Mortal m) {
m.die(h);
}
}
public interface Mortal {
public void die(Hero h);
}
注意实例化问题,类的内部属性值无法被实例化的对象改变。传参问题还不太清楚