新手剛寫了關於理解繼承的小程序,有點搞不懂就問了一下。
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);
}
注意實例化問題,類的內部屬性值無法被實例化的對象改變。傳參問題還不太清楚