zoukankan      html  css  js  c++  java
  • 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="来自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 。
    因为多态的规则: 运行的时候,总是运行的是父类中的变量

    真正的继承并不是父类声明有的属性,然后子类就会自动声明有。 而是 子类和父类是共同体,子类假如没有定义这个属性的话,它就直接拿父类的属性来用
    假如父类有一个同名属性,子类也声明一个同名属性,那么父类的这个同名属性就会被自动隐藏。

  • 相关阅读:
    android中给TextView或者Button的文字添加阴影效果
    android:layout_weight详解
    android Button 颜色的变化(点击,放开,点击不放)
    Android之最简单的ImageView加边框方法
    泳道图
    使用Navicat生成ER关系图并导出
    IDEA须知
    Error running Tomcat8: Address localhost:1099 is already in use(IDEA错误)
    3分钟打动投资人:商业计划书篇
    HTML按钮属性
  • 原文地址:https://www.cnblogs.com/czy16/p/8952390.html
Copyright © 2011-2022 走看看