封 装
封装是面向对象编程(OOP)的三大特性之一,它将数据和操作数据的方法组合在一个单元内部,并对外部隐藏其具体实现细节。在Java中,封装是通过类的访问控制修饰符(如 private、protected、public
)和访问方法(getter 和 setter)来实现的。
访问控制修饰符
在Java中,类的成员可以使用不同的访问控制修饰符来控制其可见性。
private:只有同一个类内部的方法可以访问。
default(包级访问):同一个包内的类可以访问。
protected:同一个包内的类以及不同包中的子类可以访问。
public:任何类都可以访问。
Getter 和 Setter 方法
这些方法用于在类外部访问和修改类的私有属性。Getter 方法用于获取属性的值,Setter 方法用于设置属性的值。它们通常是公有方法,允许外部代码通过方法来访问属性,而不需要直接访问属性本身。
封装的优点
-
数据隐藏: 封装隐藏了类的内部实现细节,防止外部代码直接访问和修改数据,从而提高了数据的安全性。
-
代码灵活性: 封装使得类的内部结构可以更改,而不影响外部代码的使用。
-
代码重用: 封装提供了接口来访问类的功能,使得其他代码可以重用类的功能而不需要了解内部实现细节。
封装的实现:
封装通过将类的成员声明为私有(private)来实现,然后通过公有(public)的 Getter 和 Setter 方法来提供对这些成员的访问和修改。
封装的应用场景:
封装在软件设计中的应用广泛,尤其适用于隐藏内部细节、提供良好的接口、确保数据安全性等场景。它有助于构建模块化、易于维护的代码。
不变性: 封装可以用于创建不变类(Immutable Class),即类的实例一旦创建就不能被修改,只能通过构造函数来初始化。
遮蔽(Shadowing)
是指一个作用域中使用了一个和外层作用域相同的变量名,导致局部变量“遮蔽”了外部变量,即无法直接访问外部变量
局部变量遮蔽成员变量
this关键字
this关键字更详细讲解点击这里
代表当前对象可以用于以下几个方面:
-
引用当前对象的成员方法
-
引用当前对象的成员变量
-
调用当前对象的构造方法
this只能在类的实例方法、实例初始化和构造方法中使用。不能在静态方法中使用。
总结
- 引用当前对象:
在类的非静态方法中,this 引用当前对象,即调用该方法的对象实例。
- 访问实例变量:
在类的方法中,可以使用 this 来访问当前对象的实例变量。
- 调用构造方法:
在一个构造方法内部,可以使用 this() 调用当前类的其他构造方法,实现代码的复用。
- 避免方法参数与实例变量同名:
当方法的参数名与实例变量同名时,可以使用 this 关键字来区分引用的是实例变量还是方法参数。
- 在构造方法中调用其他构造方法:
使用 this() 在构造方法中调用其他构造方法,以减少代码冗余。
- 在匿名内部类中:
在匿名内部类中,如果需要引用外部类的实例,可以使用 外部类名.this。
- 在静态方法中的限制:
this 不能在静态方法中使用,因为静态方法与特定对象实例无关。
- 构造方法中的 this 和 super 的关系:
构造方法中的 this() 和 super() 不能同时使用,因为它们都必须作为构造方法的第一行。