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没有赋值,这是大佬画的图

java 继承和super关键字_第1张图片

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

注意实例化问题,类的内部属性值无法被实例化的对象改变。传参问题还不太清楚

你可能感兴趣的:(java基础)