java 繼承和super關鍵字

新手剛寫了關於理解繼承的小程序,有點搞不懂就問了一下。

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

注意實例化問題,類的內部屬性值無法被實例化的對象改變。傳參問題還不太清楚

發佈了19 篇原創文章 · 獲贊 2 · 訪問量 6493
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章