封装与访问控制:让你的代码更加安全和可维护!
开篇语
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前序
在面向对象编程中,封装是一个核心的概念。它让我们能够将对象的状态和行为封装在一起,提供对外界的接口,而隐藏内部实现细节。这不仅使得代码更加简洁,还能够保证数据的安全性和完整性。而封装的核心机制之一,就是访问控制。
在Java中,访问控制是通过访问修饰符来实现的。访问修饰符允许我们定义类、方法或变量的可见性,决定了其他类能否访问这些成员。通过合理使用访问修饰符,我们能够更好地控制数据的访问权限,确保对象的状态只在合法的范围内被修改。
今天,让我们一起探讨封装与访问控制的相关概念,理解如何通过私有化成员、使用getter
和setter
方法以及合理使用访问修饰符,来保护对象的内部数据。
前言
你是否遇到过这样的情况:在写代码时,你希望某些变量或者方法不被外部直接访问和修改?这时,封装和访问控制就派上用场了。通过将数据私有化,并暴露出公开的接口,你可以让外部只能通过合法的方式与数据交互,从而避免潜在的错误和不一致的状态。
接下来,我们将一起深入探讨如何使用Java中的访问修饰符来实现封装,并通过getter
和setter
方法来控制对象的访问权限,保障数据的安全性。
第一部分:私有化成员:private
、protected
、public
、default
Java中的访问修饰符有四种,它们分别控制类、方法和变量的访问权限:private
、protected
、public
和default
(包访问权限)。
1.1 private
修饰符
private
表示成员变量或方法只能在同一个类内访问,外部类无法直接访问。这是最严格的访问控制,通常用于保护类的内部状态,避免外部直接修改。
示例:
public class Person {
private String name; // 私有化成员变量
private int age;
// 私有方法
private void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
// 公共的getter和setter方法来访问私有变量
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
解释:
name
和age
是私有的,不能被类外直接访问。getName()
和setName()
是公共的接口,外部可以通过它们来访问和修改name
的值。
1.2 protected
修饰符
protected
表示成员可以在同一个包内访问,也可以在不同包的子类中访问。这通常用于继承中的访问控制。
示例:
public class Animal {
protected String name;
protected void makeSound() {
System.out.println("Animal makes sound");
}
}
public class Dog extends Animal {
public void displayInfo() {
System.out.println("Dog's name: " + name);
}
}
解释:
name
和makeSound()
在Animal
类中是protected
的,Dog
类作为Animal
的子类,可以访问它们。
1.3 public
修饰符
public
表示成员可以被任何类访问,不论是同一个包内还是不同包中的类。public
是最宽松的访问控制,用于类、方法或变量需要被外部广泛访问时。
示例:
public class Person {
public String name;
public void speak() {
System.out.println("Hello, I'm " + name);
}
}
解释:
name
和speak()
是public
的,任何类都可以直接访问。
1.4 default
修饰符(包访问权限)
如果没有显式指定访问修饰符,则默认使用default
访问权限。它表示成员只能在同一个包内访问,不能跨包访问。
示例:
class Car {
String model; // 默认访问修饰符(包访问权限)
void start() {
System.out.println("Car is starting...");
}
}
解释:
model
和start()
在同一个包内可以访问,但不同包的类无法访问。
第二部分:getter
和setter
方法
getter
和setter
方法通常用来访问和修改类中的私有变量。通过这两个方法,可以控制如何读取和修改变量的值,通常用于封装数据,使得类的内部实现与外部代码隔离开来。
2.1 getter
方法
getter
方法用于获取私有成员变量的值。它通常以get
开头,后面跟着变量的名称(首字母大写)。
示例:
public class Person {
private String name;
public String getName() {
return name;
}
}
解释:
getName()
方法返回私有成员变量name
的值,外部通过这个方法可以访问到name
。
2.2 setter
方法
setter
方法用于设置私有成员变量的值。它通常以set
开头,后面跟着变量的名称(首字母大写)。
示例:
public class Person {
private String name;
public void setName(String name) {
this.name = name;
}
}
解释:
setName()
方法允许外部代码修改name
的值。它通过this
关键字来区分成员变量和方法参数。
2.3 为什么使用getter
和setter
方法?
-
封装性:通过
getter
和setter
方法,你可以在获取或设置值时,加入一些额外的逻辑。例如,你可以在setter
方法中检查输入的有效性,或在getter
方法中计算值。 -
安全性:可以控制数据的访问权限,避免外部直接修改对象的内部状态。
第三部分:访问修饰符的使用场景
理解每个访问修饰符的使用场景,有助于我们在实际编程中做出更合理的设计决策。
3.1 使用private
- 场景:你希望类的内部状态不被外部直接修改,保持数据的完整性。
- 例子:所有的成员变量都可以设为
private
,并通过getter
和setter
方法来访问。
3.2 使用protected
- 场景:你希望子类能够访问父类的成员,但又不希望其他类直接访问这些成员。
- 例子:在继承关系中,父类的方法或变量需要被子类访问,但不希望外部类直接访问。
3.3 使用public
- 场景:你希望类或方法可以被其他任何类访问。
- 例子:某些方法是公开的,例如API的接口方法,或者类的公共功能。
3.4 使用default
(包访问权限)
- 场景:你希望同一个包内的类可以访问,但外部包的类不能访问。
- 例子:某些类或方法不需要对外部暴露,只在同一包内使用。
总结
封装与访问控制是面向对象编程的基础之一。通过合理使用private
、protected
、public
和default
访问修饰符,可以有效地控制数据的访问权限,确保类的内部状态不会被外部直接篡改。此外,getter
和setter
方法能够提供访问私有变量的接口,同时增加了数据安全性和灵活性。
理解并运用这些概念,你将能编写出更加健壮和可维护的代码,提升代码的封装性和可扩展性。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!
- 点赞
- 收藏
- 关注作者
评论(0)