java-polymorphism-doubt

first question

parent class.java

public class Hero {
    public String name = "来自父类的字段";
    public void effect(){
        System.out.println("来自父类的方法");
    }
    
}

subclass.java

public class ADHero extends Hero {

    public String name = "来自子类的字段";
    public void effect(){
        System.out.println("来自子类的方法");
    }
    

}

test.java

Output result:

Question 2

Child class, parent class and above remain the same

test.java

    public static void main(String[] args) {
        Hero  hero = new Hero();
        ADHero adHero = new ADHero();
        System.out.println("父类地址是:"+hero);
        System.out.println("子类地址是:"+adHero);
        System.out.println(hero.name);
        hero=adHero ; 
        System.out.println("赋值后父类地址是:"+hero);
        System.out.println(hero.name);
}

output result

Question 3

parent class.java

public class Hero {
    public String name = "来自父类的字段";
    public void effect(){
        System.out.println("来自父类的方法");
    }
    
}

subclass.java

public class ADHero extends Hero {

    //public String name = "来自子类的字段";   //注意 注释掉了
    public void effect(){
        System.out.println("来自子类的方法");
    }
    

}

test.java

public static void main(String[] args) {
        Hero  hero = new Hero();
        ADHero adHero = new ADHero();
        System.out.println("父类地址是:"+hero);
        System.out.println("子类地址是:"+adHero);
        System.out.println(hero.name);
        hero=adHero ; 
        System.out.println("赋值后父类地址是:"+hero);
        System.out.println(hero.name);
}

output result

Question 4

test.java

public static void main(String[] args) {
        Hero  hero = new Hero();
        ADHero adHero = new ADHero();
        System.out.println("父类地址是:"+hero);
        System.out.println("子类地址是:"+adHero);
        adHero.name="来自子类的字段";  //注意 增加了这句
        System.out.println(hero.name);
        hero=adHero ; 
        System.out.println("赋值后父类地址是:"+hero);
        System.out.println(hero.name);
}

Actually --- adHero.name="Field from subclass"; // If the subclass does not have a name attribute, the name of this sentence is the name of the parent class. If the subclass name attribute, then the name of this sentence is
not the subclass name, please see question 5

output result

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324930012&siteId=291194637