JAVA类成员的可见性
来源:互联网 发布:千里眼和顺风耳知乎 编辑:程序博客网 时间:2024/05/29 03:10
群里讨论了很激烈的一个问题,java中类成员的可见性问题,最终我也因为一些不确定因素,没能很自信地将java中类成员的可见性说得很清楚,于是决定回过头来重新温习一下JAVA中类成员的可见性问题,下面做一下实际的测试代码。
一、类的成员可见性
二、测试代码
我在这里主要写了这么几个类文件:Father.java,Son.java,Neighbor.java,Son类继承于Father类,包的结构如下
测试1:同一类中的测试
Father.java
package test.pack.visible;public class Father {String sex;private String secret;protected int age;public String name;public Father() {this.name = "ryn.xiao";this.age = 37;this.secret = "I love your mother when I met her";sex = "男";}private void secret() {System.out.println("I have a private secret!\n");}public void tellSecret() {System.out.println("my secret is " + this.secret + "\n");}protected void willTell() {System.out.println("if you study hard, I will tell you a secret of mine!\n");}void ignoreOthers() {System.out.println("sorry, I don't konw you.\n");}public static void main(String[] args) {Father father = new Father();/** private test **/System.out.println("----------private----------");// 1.fieldSystem.out.println("Father's secret is " + father.secret);// 2.methodfather.secret();/** protected test **/System.out.println("----------protected----------");// 1.fieldSystem.out.println("Father's age is " + father.age);// 2.method father.willTell();/** public test **/System.out.println("----------public----------");// 1.fieldSystem.out.println("Father's name is " + father.name);// 2.method father.tellSecret();/** default test **/System.out.println("----------default----------");// 1.fieldSystem.out.println("Father's sex is " + father.sex);// 2.method father.ignoreOthers();}}
打印结果:
可以看出的是所有的属性以及方法对于当前类都是可见的
Son.java
package test.pack.visible;public class Son extends Father {public static void main(String[] args) {Son son = new Son();/** private test **/System.out.println("----------private----------");// 1.fieldSystem.out.println("Father's secret is " + son.secret);// 2.methodson.secret();/** protected test **/System.out.println("----------protected----------");// 1.fieldSystem.out.println("Father's age is " + son.age);// 2.method son.willTell();/** public test **/System.out.println("----------public----------");// 1.fieldSystem.out.println("Father's name is " + son.name);// 2.method son.tellSecret();/** default test **/System.out.println("----------default----------");// 1.fieldSystem.out.println("Father's sex is " + son.sex);// 2.method son.ignoreOthers();}}
只要代码在eclipse上编辑,就会出现如下的错误提示:
注释掉错误部分:打印结果如下:
可以看到子类在同一包中访问父类中的属性和方法,除了私有的属性和方法不可以访问外,其他的都是可以访问的其实对于在同一包中的其他类来说,这个结论也是成立的,下面就是在同一包中非子类的测试代码.
测试3:同一包中非子类的测试
Neighbor.java
package test.pack.visible;public class Neighbor {public static void main(String[] args) {Father father = new Father();/** private test **///System.out.println("----------private----------");// 1.field//System.out.println("Father's secret is " + father.secret);// 2.method//secret();/** protected test **/System.out.println("----------protected----------");// 1.fieldSystem.out.println("Father's age is " + father.age);// 2.method father.willTell();/** public test **/System.out.println("----------public----------");// 1.fieldSystem.out.println("Father's name is " + father.name);// 2.method father.tellSecret();/** default test **/System.out.println("----------default----------");// 1.fieldSystem.out.println("Father's sex is " + father.sex);// 2.method father.ignoreOthers();}}
效果如上一样,这里就不贴图了
测试4:不同包中子类的测试代码跟上述的Son.java代码一样,只是包换了
会发现在访问私有属性以及默认属性时出现了错误,证明了不同包的子类只能访问父类的公有和保护属性以及方法
测试5:不同包中非子类的测试
代码依然跟上面的Neighbor.java一样,包换了
根据图中的编辑时错误显示,不同包中的非子类访问一个类中的属性或者方法时,只能访问其公有属性
注:可以通过在一个类中声明getter以及setter方法来提供外部类访问属性的方法
0 0
- JAVA类成员的可见性
- 类成员的可见性
- 类成员的可见性
- c++类继承的成员可见性
- (UML)Java 程序中成员函数的可见性
- Java-对象创建和成员可见性
- 类成员函数、类的作用域和可见性
- c++ 成员可见性
- 类成员函数参数和类成员变量的可见性
- java的四种访问控制级别对于成员的可见性的整理
- Java学习笔记(类的可见性)
- java多线程的可见性
- java的内存可见性
- 从“派生类不能访问基类对象的protected成员”开始讨论各类成员的“可见性”
- C#学习笔记三 类的成员变量的可见性需要个性化声明
- (转)关于继承,不同继承方式,对于派生类成员以及基类的可见性
- 关于继承,不同继承方式,对于派生类成员以及基类的可见性
- 关于继承,不同继承方式,对于派生类成员以及基类的可见性
- 自主访问控制dac与强制访问控制mac的原理是什么区别在哪里
- Win7运行vc++6.0打开显示Microsoft(R) Developer Studio已停止工作解决方法
- 不完美的软件锁
- MFC如何使用printf
- Atitit.Gui控件and面板----db数据库区----- .数据库比较同步工具 vOa
- JAVA类成员的可见性
- machine learning 牛人
- 遍历Map的四种方法
- Java中堆栈理解(有关基本数据和引用数据)
- java内部类的作用(二)----隐藏作用
- tomcat Context 配置参数含义
- 散列表的实现-开放定址法
- ListControl 控件的使用方法
- Deep Learning深度学习相关入门