第一题
父类.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="来自222"; //注意 增加了这句
System.out.println(hero.name);
hero=adHero ;
System.out.println("赋值后父类地址是:"+hero);
System.out.println(hero.name);
}
不行的话,请看第5题
输出结果
总结
adHero.name =“来自222”。这句话改的是父类中的name 还是 自己的name 。 因为题目中 子类没有定义过name的,
答:从结果来推测,这句话改的是父类中的name 。
因为多态的规则: 运行的时候,总是运行的是父类中的变量
真正的继承并不是父类声明有的属性,然后子类就会自动声明有。 而是 子类和父类是共同体,子类假如没有定义这个属性的话,它就直接拿父类的属性来用
假如父类有一个同名属性,子类也声明一个同名属性,那么父类的这个同名属性就会被自动隐藏。