java-多态-之疑惑

第一题

父类.java

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

子类.java

public class ADHero extends Hero {

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

}

test.java

输出结果:

第二题

子类 , 父类 和上面保持不变

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

输出结果

第三题

父类.java

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

子类.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);
}

输出结果

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

其实--- adHero.name="来自子类的字段"; // 假如子类没有name属性的话,这句话的name 拿的是父类的name 。假如子类name属性的话,那么这句话的name 拿的是子类的name
不行的话,请看第5题

输出结果

猜你喜欢

转载自www.cnblogs.com/czy16/p/8952390.html