今天根据要求对集中访问控制符做了测试,在子类跨包继承的权限问题,发现有些矛盾。

代码说明:父类Father 在packageA中  子类Child01也在packageA中  子类Child02在packageB中

下面上代码;

 1 package packB;
 2 import packA.Father;
 3 //    本类是Father类不同包的子类
 4 public class Child02 extends Father
 5 {
 6     public static void main(String[] args) {
 7         Father father = new Father();
 8         System.out.println(father.public_a);    //   public修饰的成员,在不同包中子类能访问
 9 //        System.out.println(father.protected_b);    //   protected修饰的成员,在不同包子类中不能访问
10 //        System.out.println(father.default_c);    //   default修饰(默认)的成员,在不同包子类中不能访问
11 //        System.out.println(father.private_d);      //   private修饰的成员,在不同包子类中不能访问
12
13         father.pulic_aa();    //  public修饰的方法,在不同包子类中能访问
14 //        father.protected_bb();    //   protected修饰的方法,在不同包子类中不能访问
15 //        father.default_cc();    //   default修饰(默认)的方法,在同包子类中不能访问
16 //        father.private_dd();    //   private修饰的方法,在同包子类中不能访问
17
18 //        下面是个人对跨包继承的深入理解,与别人的理解和说法有些矛盾     由于方法的权限和属性一样  就不写了
19
20 //        访问方式一:
21         Child02 child = new Child02();
22         child.public_a = 10;
23         child.protected_b = 20;
24 //        child.default_c = 30;    //报错      父类该属性对子类不可见
25 //        child.private_d = 30;    //报错    父类该属性对子类不可见
26
27     }
28 //     访问方式二:
29     void test(){
30         public_a = 10;
31         protected_b = 20;
32 //        default_c = 30;    //    报错        父类该属性对子类不可见
33 //        private_d = 30;    //    报错        父类该属性对子类不可见
34     }
35 //    访问方式三:
36     void test1(){
37         super.public_a = 10;
38         super.protected_b = 20;
39 //        super.default_c = 30;    //    报错        父类该属性对子类不可见
40 //        super.private_d = 30;    //    报错        父类该属性对子类不可见
41     }
42
43
44
45
46 }

从第7行到第16行,是对在跨包子类中的Father对象进行操作,访问结果说明只能访问到 public修饰的属性和方法。

就是从这里产生了矛盾,因为和之前所了解的内容有出入  故对其进行深入了解。

下面从第20行到第40行是另外的三种访问方式 和之前了解的权限相匹配;

  方式一:是访问子类对象中从父类继承的属性,发现父类中protected修饰的属性可以被访问,此时访问的是子类对象的属性;

  方式二:是访问子类中从父类继承的属性,发现父类中protected修饰的属性可以被访问,此时访问的属性是子类的属性;

  方式三:通过super来调用父类的属性,这里会让人觉得这个肯定是父类调用自身的属性了;

  于是我对代码进行改造,让结果变得更明显:

Father 类

 1 package packA;
 2 //本类是参考类,用来和child、uncle了来测试
 3 public class Father {
 4 //    成员变量
 5     public int public_a = 1;
 6     protected int protected_b = 2;
 7     int default_c = 3;
 8     private int private_d = 4;
 9 //    方法
10     public void pulic_aa(){
11
12     }
13     protected void protected_bb(){
14
15     }
16     void default_cc(){
17
18     }
19     private void private_dd(){
20
21     }
22
23     public static void main(String[] args) {
24
25     }
26
27 }

Child02类

 1 package packB;
 2 import packA.Father;
 3 //    本类是Father类不同包的子类
 4 public class Child02 extends Father
 5 {
 6     public static void main(String[] args) {
 7         Father father = new Father();
 8         System.out.println(father.public_a);    //   public修饰的成员,在不同包中子类能访问
 9 //        System.out.println(father.protected_b);    //   protected修饰的成员,在不同包子类中不能访问
10 //        System.out.println(father.default_c);    //   default修饰(默认)的成员,在不同包子类中不能访问
11 //        System.out.println(father.private_d);      //   private修饰的成员,在不同包子类中不能访问
12
13         father.pulic_aa();    //  public修饰的方法,在不同包子类中能访问
14 //        father.protected_bb();    //   protected修饰的方法,在不同包子类中不能访问
15 //        father.default_cc();    //   default修饰(默认)的方法,在同包子类中不能访问
16 //        father.private_dd();    //   private修饰的方法,在同包子类中不能访问
17
18 //        下面是个人对跨包继承的深入理解,与别人的理解和说法有些矛盾     由于方法的权限和属性一样  就不写了
19
20 //        访问方式一:
21         Child02 child = new Child02();
22         child.public_a = 10;
23         child.protected_b = 20;
24 //        child.default_c = 30;    //报错      父类该属性对子类不可见
25 //        child.private_d = 30;    //报错    父类该属性对子类不可见
26         child.test();
27         child.test1();
28     }
29 //     访问方式二:
30     void test(){
31         public_a = 10;
32         protected_b = 20;
33         System.out.println(public_a+"*"+protected_b);
34         System.out.println(super.public_a+"*"+super.protected_b);
35         Father father01 = new Father();
36         System.out.println(father01.public_a);
37 //        default_c = 30;    //    报错        父类该属性对子类不可见
38 //        private_d = 30;    //    报错        父类该属性对子类不可见
39     }
40 //    访问方式三:
41     void test1(){
42         super.public_a = 10;
43         super.protected_b = 20;
44 //        super.default_c = 30;    //    报错        父类该属性对子类不可见
45 //        super.private_d = 30;    //    报错        父类该属性对子类不可见
46     }
47
48
49
50
51 }

输出结果:

从结果可以明显的看出通过super方式得到是Child02类的public_a的属性,并不是Father类的public_a的属性;

  强势插入一段自己对super的理解,super是子类对父类的一个引用,指向子类从父类继承下来的属性,若指向父类中子类没有继承的属性则会报错,另外如果子类对继承的属性进行重写,则super指向父类的该属性。

我们可以看看和Father同包的Child01类里面指向没有继承的属性是不是可以:

 1 package packA;
 2 //    本类是Father类同包的子类
 3 public class Child01 extends Father
 4 {
 5     public static void main(String[] args) {
 6         Father father = new Father();
 7         System.out.println(father.public_a);    //测试证明   public修饰的成员,在同包子类中能访问
 8         System.out.println(father.protected_b);    //测试证明   protected修饰的成员,在同包子类中能访问
 9         System.out.println(father.default_c);    //测试证明   default修饰(默认)的成员,在同包子类中能访问
10 //        System.out.println(father.private_d);  测试证明   private修饰的成员,在同包子类中不能访问
11
12         father.pulic_aa();    //测试证明   public修饰的方法,在同包子类中能访问
13         father.protected_bb();    //测试证明   protected修饰的方法,在同包子类中能访问
14         father.default_cc();    //测试证明   default修饰(默认)的方法,在同包子类中能访问
15 //        father.private_dd();    测试证明   private修饰的方法,在同包子类中不能访问
16     }
17     void test(){
18         super.public_a = 10;
19         super.protected_b = 20;
20         super.default_c = 30;
21 //        super.private_d = 30;    //    报错        父类该属性对子类不可见
22     }
23 }

这样就充分说明了,属性的继承和super使用条件,也就是方式三中访问的属性其实是Child02类的属性,也就是说在跨包的子类里面访问父类的属性的还是只有public;

同时子类继承权限因为跨包影响,从pulic,protected和default 变成 pulic和protected;

转载于:https://www.cnblogs.com/ascetic-xj/p/6523749.html

深入理解JAVA中的跨包继承相关推荐

  1. java 可以继承不同包的类吗_深入理解JAVA中的跨包继承

    今天根据要求对集中访问控制符做了测试,在子类跨包继承的权限问题,发现有些矛盾. 代码说明:父类Father 在packageA中 子类Child01也在packageA中 子类Child02在pack ...

  2. java封装继承多态的理解_用最傻瓜式的方法理解Java中的封装、继承和多态

    说到java中面向对象的封装.继承和多态,很多人会说这么简单这么入门的东西一直讲干嘛,虽然是基础,但是我们要明白,所有东西都是要在基础上发展的,没有基础就去学其他的,那么你肯定是很容易失败的,那么应该 ...

  3. 一文带你理解Java中Lock的实现原理

    转载自   一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...

  4. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  5. 深入理解Java中的IO

    本文转载自:深入理解Java中的IO 为了方便理解与阐述,先引入两张图 在整个Java.io包中最重要的就是5个类和一个接口. 5个类指的是File.OutputStream.InputStream. ...

  6. 深入理解 Java中的 流 (Stream)

    个人小站,正在持续整理中,欢迎访问:http://shitouer.cn 小站博文地址:深入理解 Java中的 流(Stream)机制 最近在看<Hadoop:The Definitive Gu ...

  7. 万字总结,一文带你秒懂Java中的封装、继承和多态(有代码 有示例)

    Java中的封装.继承和多态 前言 一.面向对象有什么优势? 二.面向对象的三大特性! 1.封装 1.1访问限定符 1.2关于包的导入 1.2封装 2.继承 2.1继承的语法 2.2父类成员访问 3. ...

  8. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  9. 理解Java中的IO

    粗略列出并理解Java中的IO 引言:     对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >   本文的目录视图如 ...

最新文章

  1. ICCV 2017 《Flow-Guided Feature Aggregation for Video Object Detection》论文笔记
  2. 排序算法:归并排序、快速排序
  3. Java核心篇之JVM--day3
  4. 手把手教你使用Python+scrapy爬取山东各城市天气预报
  5. MySQL redo lock 死锁问题排查 解决过程
  6. 我的计算机用户账户logo,UserAccountControl
  7. Spotlight – Recommend Node.js Projects For January
  8. 关于只针对ie7浏览器的css问题
  9. 深度干货!一文读懂人脸识别技术(建议收藏)
  10. Python爬虫——下载韩寒博客文章
  11. dwg格式的图纸文件怎么打开?一分钟教你快速解决!
  12. 中美高通商标案一审宣判:驳回上海高通索赔1亿请求
  13. 7-85 根据输入的空气污染指数,输出相应的信息。
  14. Generate Constructor using Fields..
  15. [SUCCESS]前后端分离开发-入门案例 +VSCode安装
  16. RuoYi若依代码生成+一键部署
  17. js语言扩展之trim
  18. tf.control_dependencies与tf.identity组合详解
  19. 如何减轻tomcat压力_6种简单的技巧可帮助您减轻工作压力
  20. Kali Linux 2016.1 x86 x64 安装 wine QQ

热门文章

  1. 文章标题 execution(* cn.sxt.dao.impl.*.*(..))解释
  2. 京东 京东健康HR面 17分钟电话面试
  3. 未知usb设备(设备描述请求失败)_HomePod mini?电源线同样不可拆卸:但或能用USB-C移动电源供电...
  4. 【机器学习】逻辑回归案例一:保险与年龄之间关系分析
  5. 利用百度地图根据三点求位置
  6. android机器人酷炫壁纸,机器人秀app下载
  7. 天线要设计为四分之一波长的原因
  8. (译)快速指南:用UIViewPropertyAnimator做动画
  9. Python实验报告
  10. 从南极之争谈软件架构十个技巧,及成功团队具备的气质