Java—封装
2024-09-29 22:07:15
- 封装
- 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法类实现对隐藏信息的操作和访问。
- 封装的实现步骤:修改属性的可见性(设为private)=>创建setter和getter方法(用于属性的读写)=>在setter和getter方法中加入属性控制语句(对属性值的合法性进行判断)
- Java中的包
- 包的作用:管理Java文件;解决同名文件冲突
- 定义包:package 包名,注意:必须放在Java源程序的第一行;包名间可以使用“.”号隔开,如:com.test.Myclass
- 系统中的包:java.(功能).(类)
- 包的使用:可以通过import关键字,在某个文件使用其他文件中的类。如import com.test.Myclass;
- java中,包的命名规范是全小写字母拼写。
- 使用包的时候,不但可以加载某个包下的所有文件,如:com.test.*;也可以加载某个具体子包下的所有文件,如:com.test.music.*
注:默认情况下,java会将同一个包内的类自动导入
以下定义了两个同名Telephone的类:
package com.test; public class Telephone {
private double screen;
public double getScreen() {
return screen;
}
public void setScreen(double newScreen) {
screen = newScreen;
}
public Telephone(){
System.out.println("com.test.Telephone无参数的构造方法");
}
}
package com.test.second; public class Telephone {
public Telephone() {
System.out.println("com.test.secont.Telephone");
}
}
Demo.java
package com.test;
import com.test.Telephone; public class Demo { public static void main(String[] args) {
Telephone phone = new Telephone();
} }
运行结果:
com.test.Telephone无参数的构造方法
package com.test;
import com.test.second.Telephone; public class Demo { public static void main(String[] args) {
Telephone phone = new Telephone();
} }
运行结果:
com.test.secont.Telephone
- 访问修饰符
- 可以修饰属性和方法的访问范围
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
private | √ | |||
默认 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
- this关键字
this代表当前对象,this.属性 操作当前对象的属性;this.方法 调用当前对象的方法
- 内部类
内部类,是定义在另一个类里面的类,与之对应,包含内部类的类被称为外部类。
内部类的作用:
- 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
- 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
- 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
- 内部类分为:成员内部类、静态内部类、方法内部类、匿名内部类
- 成员内部类
- Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等
- Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响
- 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
- 编译上面的程序后,会发现产生了两个 .class 文件,Outer$Inner.class和Outer.class,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class
注意:
- 外部类是不能直接使用内部类的成员和方法
- 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字
- 静态内部类
- 静态成员类不能直接访问外部类的非静态成员,可以通过new 外部类().成员来访问
- 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
- 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
- 方法内部类
方法内部类是内部类定义在外部类的方法中。方法内部类只在该方法的内部可见。
注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符。
package com.test; public class Demo12 { public void show() {
final int a = 12;
int b = 13; class MInner {
int c= 2;
public void print() {
System.out.println("外部类方法中的变量a=" + a);
System.out.println("外部类方法中的变量b=" + b);
System.out.println("内部类中的变量c=" + c);
}
}
MInner mi = new MInner();
mi.print();
} public static void main(String[] args) {
Demo12 demo = new Demo12();
demo.show();
}
}
运行结果:
外部类方法中的变量a=12
外部类方法中的变量b=13
内部类中的变量c=2
最新文章
- [LeetCode] Maximum Product Subarray 求最大子数组乘积
- JMeter学习-026-JMeter 分布式(远程)参数化测试实例
- 全面理解Javascript闭包和闭包的几种写法及用途
- SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法
- IOS的UI基础02
- struts中的常量,action配置中的默认值
- Visual C++ 开发心得与调试技巧
- myisam和innodb索引实现的不同
- BZOJ1709: [Usaco2007 Oct]Super Paintball超级弹珠
- HDOJ(HDU) 1862 EXCEL排序(类对象的快排)
- 查询职责分离(CQRS)模式
- Sqoop自定义多字节列分隔符
- Java基础笔记9
- 简单记录一下原生ajax
- 从运维的角度理解Iaas、Paas、Saas云计算
- js定时器setInterval()与setTimeout()
- css:pointer-events: none
- Redis有序集合操作
- 《DSP using MATLAB》Problem 4.26
- Showing a tooltip
热门文章
- 牛客寒假算法基础集训营4 F Applese 的大奖
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)
- vue项目中打包编译后,CSS样式【-webkit-box-orient: vertical】打包后丢失问题
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_通过ILDasm.exe查看编译器如何将类型及其成员编译成元数据
- HDU-Big Number (斯特林公式)
- 搭建 flask 应用
- Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找
- php数组·的方法3-数组和变量之间的转换
- python csv.reader参数指定
- Hadoop Intro - Configure