Java学习日记之类和对象的属性
2015-05-28 20:58
441 查看
在面向对象的程序设计中,我们需要一定程度的封装性以实现信息的隐藏。类的可访问性,是指当前类可被其他类的所访问的程度。这种形式的修饰符有两个,通过不同的可访问性修饰符可以体现程序的封装性。 类的可访问修饰符只能使用: ·public ·默认访问控制属性 这两种也适用于构造方法的修饰。 public修饰的类可被其他任意类所访问,而默认访问控制属性就是无修饰符,只能被当前包中的类所访问。也就是public修饰的类可展示给所有的类使用,而默认访问控制属性修饰的类只能展示给当前包中的类使用。 **public** 关键之public修饰的类具有最大的可被访问性,凡是用public修饰的类都可以被其他任何类所访问,无论是其他类实在当前包中还是别的地方,所以,public具有最好的公开性。 但是在使用public修饰符的时候,必须保证一个包中,也就是一个.java程序中,只能有一个public类,这个类作为整个.java文件对外的接口,实现文件内的封装。 示例1:
//首先生成一个包文件,其中包含一个类 package myPage; public class Mypackage { public void sum(int i,int j) { System.out.println(i+j); } }
编译通过,生成包myPage.里面保存Mypackage文件,然后创建新的应用程序,不在当前包中,看能不能使用包中的类创建对象。
package classTest; import myPage.Mypackage; public class PublicTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Mypackage mp = new Mypackage(); mp.sum(2, 3); } }
编译后,程序运行成功,可知该程序可调用当前包中的文件。 public修饰的类具有最好的可被访问属性,所以无论PublicTest类在什么地方,都可以使用Mypackage类。 需要注意的是,在调用该类的时候需要首先导入该类,才能使用(使用import语句定位并导入)。 **默认访问** 默认访问属性说明该类只能被同一个包中的类所访问,包外的类无法生成该类的对象。这样,就是类有了封装性能。 示例2:
//如果把示例1中的类Mypackage改为如下: package myPage; class Mypackage { public void sum(int i,int j) { System.out.println(i+j); } }
在PublicTest类中的编译时无法通过的,会提示:“The type myPage.Mypackage is not visible”。因为Mypackage不是公共的,不能访问。 修改方法:一种是放在同一个包中,另一种就是在Mypackage类前面添加public关键字。 **成员的可访问性** 与类的可访问修饰符想死,类中的成员也有可访问性修饰符,这些修饰符说明了成员能否在其他类中使用。 类中成员的修饰符有4种:private、默认、protected、public。他们的限定强度依次减弱。 1.public 示例3:
public class test{ public static void main(String [] args){ myClass mc = new myClass(); System.out.println(mc.i); mc.out(); } } class myClass { public int i =4; public void out() { System.out.println("four"); } }
程序顺利编译运行。 2.protected 被protected修饰的成员变量或者方法可以被同一个类、同一个包中的不同类以及不同包中的子类所访问。与public不同的是,protected修饰的成员不能被不同的包中的非子类访问,也就是说protected可以隐藏一部分信息,使之不可见不可用。 示例4:
//将示例3中的类改为如下: class myClass { protected int i =4; protected void out() { System.out.println("four"); } }
程序编译运行正常。 示例5:
//将示例1中的Mypackage改为如下: class myClass { protected int i =4; protected void out() { System.out.println("four"); } }
编译不能通过,提示:“The method sum(int, int) from the type Mypackage is not visible”。 原因就在于protected修饰的方法只可以被同一包中的类或者不同包中的子类访问。 3.默认 如果成员没有属性控制符,就是默认访问控制属性。默认访问控制属性的可访问性更加严格,只能被当前类或者同一个包中的其他类访问。 示例6:
//将示例1中的Mypackage类改为如下: package myPage; public class Mypackage { void sum(int i,int j) { System.out.println(i+j); } }
编译提示:The method sum(int, int) from the type Mypackage is not visible。 程序中,sum()为默认属性,不能被其他包中的类访问和使用,变量mc.sum()无法找到,所以导致程序出现错误。 4.private private修饰的成员只能在同一个类中被访问,在任何其他类中都不能被访问,这就保证了private具有最好的封装性能。 示例7:
public class example{ public static void main(String [] args){ test myTest = new test(); myTest.show(); myTest.out();//无法调用 } } class test { private void out() { System.out.println("private void out"); } void show() { System.out.println("void show()"); } }
编译提示:“The method out() from the type test is not visible”。 因为out()为private类型,所以不能被其他类访问。
https://shop145619674.taobao.com/?spm=a313o.7775905.1998679131.d0011.inZI48女性点击,有女朋友的男性也可以点哦,单身男性尽量不要点。。
相关文章推荐
- Ext:TextField的Vtype默认类型
- Java默认类型,类型转换,常量与变量笔记
- 关于C++中的public、private、protected
- 反射机制的概述和字节码对象的获取方式 JavaBean的概述&BeanUtils的使用 反射操作构造方法、成员方法、成员属性
- iOS 开发:运行时,查看对象的成员属性
- python类的方法属性与方法属性的动态绑定代码详解
- 静态方法,类方法,属性方法,属性方法实例
- 关于JAVA有关类与继承的学习
- Java多线程总结
- java方法重载和重写
- java内部类的一些细节
- 疯狂Java学习笔记(54)----------详解Java IO(全面)
- Java基础Day01-概述
- Java核心技术卷二部分笔记
- java 上溯造型(向上转型)和动态绑定
- 对ORM的支持 之 8.4 集成JPA ——跟我学spring3
- java复习(三)
- 深入理解Java内存模型(一)——基础
- JAVA基础之RandomAccessFile总结
- Spring_Transactional_Propagation