关于子类继承父类属性的问题讨论(希望得到大神指点)

2 篇文章 0 订阅

                      

              一,介绍

                           我们知道当子类继承父类时,会覆盖父类中和子类同名的方法和属性,前提这些方法和属性不是私有的,下面让我们看一段代码如下


                   

	class A{  
		public int num = 1 ; 
		public String name="A";
		
		
		public int getNum() {
			return num;
		}


		public void setNum(int num) {
			this.num = num;
		}


		public String getName() {
			return name;
		}


		public void setName(String name) {
			this.name = name;
		}


		public void method(){ 
		  System.out.print("A"); 
		 } 
		} 
		class B extends A{  
			public int num = 2 ;
			public String name="B";
			
			
			public int getNum() {
				return num;
			}


			public void setNum(int num) {
				this.num = num;
			}


			public String getName() {
				return name;
			}


			public void setName(String name) {
				this.name = name;
			}


			public void method(){ 
		  System.out.print("B"); 
		 } 
		} 
		  
      public class Test { 
		
		     public static void main(String[] args) { 
          A a = new B(); 
          B b = new B();
          A a2  = new A();
          System.out.println(a.name); 
          System.out.println(a.getName());
          a.method(); 
          System.out.println("====================================");
          System.out.println(b.name);
          System.out.println(b.getName());
          b.method();
          System.out.println("============================================");
          System.out.println(a2.name);
          System.out.println(a2.getName());
           a2.method();
		 } 
		} 

            这段代码中,B类继承了A类,B类覆盖了A类的属性和方法,但是从打印结果来看,方法被覆盖了,但是属性没有被覆盖,下面是打印结果

          

     

          

      为什么会这样能?我们知道的结论如下

         

      子类转型为父类的规则:

  1. 只能调用父类的属性

  2. 只能调用父类未被复写的方法

  3. 只能调用被子类复写的方法

       换言之,只有复写的方法才能被调用,被复写的属性不同,这说明,方法和属性在内存中的结构是不同的,正常结构如下

        

    

                   但是如果是父类引用指向子类,就不太一样了,如下

                  


                  显然他会找被子类复写了的方法,如果该方法子类没有,根据继承结构,看 父类有没有,有就调用父类方法,但是属性,就会直接根据继承结构,找父类

                   中的属性,而不会使用子类的属性,即子类的属性不能复写父类的属性,至于为何如此,那么只能说他就是这么设计的,我也不知道。如果有错的话,请纠正


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值