欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力
对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
专栏:
文章概述:对 封装详解(属性访问控制):_四个访问控制符_protected的两个细节的介绍
关键词:封装详解(属性访问控制)四个访问控制符 protected的两个细节
本文目录:
封装(encapsulation)
封装是面向对象三大特征之一。
封装的作用和含义
我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口。
我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。
编程中封装的具体优点:
- 提高代码的安全性。
- 提高代码的复用性。
- “高内聚”:封装细节,便于修改内部代码,提高可维护性。
- “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。
封装的实现—使用访问控制符
Java是使用访问控制符
来控制哪些细节需要封装,哪些细节需要暴露的。
Java中4种访问控制符
分别为private、default、protected、public。
访问权限修饰符
修饰符 | 同一个类** | 同一个包中 | 子类 | 所有类 |
private | ☆ | |||
default | ☆ | ☆ | ||
protected | ☆ | ☆ | ☆ | |
public | ☆ | ☆ | ☆ | ☆ |
【注】关于protected的两个细节:
- 若父类和子类在同一个包中,子类可访问父类的protected成员,也可访问父类对象的protected成员。
- 若子类和父类不在同一个包中,子类可访问父类的protected成员,不能访问父类对象的protected成员。
示例代码 :
package basic_grammar;
public class TestProtected {
public static void main(String[] args) {
ChildClass2 child = new ChildClass2();
child.accessProtected();
}
}
class FatherClass2{
protected int value;
protected void f() {
System.out.println("FatherClass method");
}
}
class ChildClass2 extends FatherClass2{
// 创建父类对象
FatherClass2 father = new FatherClass2();
protected void accessProtected() {
// 通过父类对象访问其 protected 成员(因为在同一个包中)
father.value = 10; // 访问 protected 字段
father.f(); // 调用 protected 方法
// 通过子类访问父类的 protected 成员
this.value = 20; // 访问继承自父类的 protected 字段
this.f(); // 调用继承自父类的 protected 方法
System.out.println("Value through father instance: " + father.value);
System.out.println("Value through this instance: " + this.value);
}
}
封装的使用细节
开发中封装的简单规则:
- 属性一般使用private访问权限。
属性私有后, 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。
- 方法:一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。