隐藏和封装
封装:
将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
封装的目的:
*隐藏类的实际细节
*在方法里加入控制逻辑,限制对成员变量不合理的访问
*可进行数据检查,从而有利于保证对象信息的完整性
*便于修改,提高代码可维护性
为实现良好封装:
#将对象的成员变量和实现细节隐藏起来,不允许外部直接访问
#把方法暴露出来,让方法来控制对这些成员变量进行安全访问和操作
使用访问控制符
private、protected、public、(default)
控制级别由小到大:
private:当前类访问权限,只能在当前类的内部访问,用于修饰成员变量
default:包访问权限,不使用任何控制符时,默认为default,可以被相同包下的其他类访问
protected:子类访问权限,可以被不同包中的子类访问,用于修饰方法,通常是希望其子类来重写这个方法。
pubic:公共访问权限,可以被所有类访问。
外部类只能使用public和默认
局部变量不能使用访问控制符来修饰
如果定义了public修饰的类,则文件名必须与public修饰的类名相同
定义一个类,实现良好封装:
类之外只能通过各自对应的setter和getter方法来操作和访问类里的成员变量
main方法中操作和访问该对象的实例:
运行结果:
模块设计追求高内聚、低耦合
访问控制符使用的基本原则:
*类里的绝大部分变量都应该用private修饰,只有一些static修饰的类似全局变量的成员变量才考虑public修饰
*如果某个类主要用作其他类的父类,该类里的大部分方法仅希望被其子类重写,而不想被外界直接调用,则应该使用protected 修饰
*希望暴露出来给别的类自由调用的方法应该用public修饰,类的构造器通过使用public修饰,从而允许在其他地方创建该类的实例,大部分外部类都是用public修饰
package、import、import static
把一个类放在指定的包结构下:
package packageName;
一旦源文件中使用了package语句,意味着该源文件里定义的所有类都属于这个包。
位于包中的每个类的完整类名都应该是包名和类名的组合
使用如下命令来编译java文件
javac -d . Hello.java
-d 选项用于设置编译生成class文件的保存位置,这里将指定生成的class文件放在当前路径,(. 代表当前路径),使用命令编译之后,当前路径没有Hello.class文件,而是多了一个Lee的文件夹,文件夹里有Hello.class文件
使用带-d选项时的javac命令来编译Java源文件时,会自动建立对应的文件结构来存放
执行
java lee.Hello
如果进入lee路径下运行则错误,而在lee文件夹所在路径运行则正常
为Java类添加包必须在Java源文件中通过package语句指定,建议源文件和class文件分开存放
类不在同一个包时,需要使用全名来调用,如lee.Hello,来使用
网友评论