注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

饥民2011

一直在搬砖

 
 
 

日志

 
 
 
 

关于权限修饰符private 的继承权限问题  

2014-01-14 18:49:01|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
   网上有文章讲, private (私有)修饰的成员是不能被派生类继承的.

   

         但系超类中即使1个成员被其实private修饰, 它还是会被派生类继承, 但是不能被派生类直接访问.

也就是说, private修饰的成员会被派生类隐藏继承了.

 

         言下之意就是派生类可以利用超类的public 方法去访问继承自超类的private 成员.


         如下面这个简单的例子:


  这是1个超类:

  1. public class Super_c3{  
  2.     //can be inherited  
  3.     public int pu_id;  
  4.   
  5.     //cannot be inherited  
  6.     private int id = 0;  
  7.   
  8.     //canbe inherited  
  9.     public boolean set_id(int i_id){  
  10.         this.id = i_id;  
  11.         return true;  
  12.     }  
  13.   
  14.     public int get_id(){  
  15.         return this.id;  
  16.     }  
  17.   
  18.     public void print_id(){  
  19.         System.out.printf("id is %d\n"this.get_id());  
  20.     }  
  21. }  

这是1个派生类:
  1. package Object_kng.Pkg_1;  
  2.   
  3.   
  4. public class Sub_c3 extends Super_c3{  
  5.     public void f(){  
  6.         //this.id = 12;  cannot access inherited privated member directly.  
  7.         this.set_id(11);  
  8.         this.print_id();  
  9.     }  
  10. }  


其中超类 Super_c3 的成员id 是private修饰的.

在子类 Sub_c3 不能直接访问这成员,    但是可以通过超类的公共方法  set_id() 和 get_id() 来赋值和访问.


注意: 如果派生类和超类不是在同1个包中,  连friendly(无权限修饰符)的成员也会隐藏继承..



由于这种隐藏继承的存在,  所以在生产中继承要谨慎, 否则多层继承中的派生类会由于存在太多隐藏成员和导致内存开销增加.


  评论这张
 
阅读(84)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017