面向对象的三大特征:封装、继承、多态
思考为什么需要封装,最后我举一个NBA的例子
类的基本作用就是封装代码。封装将类的一些特征和行为隐藏在类内部,不允许类外部直接访问。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
我们可以通过类提供的方法来实现对隐藏信息的操作和访问。隐藏了对象的信息,留出了访问的接口。
类的封装就像我们使用的电脑一样,我们不用关心电脑内部复杂的电路构造,可以通过充电口,按键,耳机等外部接口对电脑进行操作和使用。
复杂的模块被封装在电脑内部,而留出的这些接口,让我们更高效的使用手机,并且保护了手机内部!
封装有两个特点:
-
只能通过规定的方法访问数据;
-
隐藏类的实例细节,方便修改和实现。
封装具有以下优点:
-
封装有利于提高类的内聚性,适当的封装可以让代码更容易理解与维护;
-
良好的封装有利于降低代码的耦合度;
-
一些关键属性只允许类内部可以访问和修改,增强类的安全性;
-
隐藏实现细节,为调用方提供易于理解的接口;
-
当需求发生变动时,我们只需要修改我们封装的代码,而不需要到处修改调用处的代码。
在 Java 语言中,如何实现封装呢?需要 3 个步骤。
-
修改属性的可见性为
private
; -
创建公开的 getter 和 setter 方法,分别用于属性的读写;
-
在 getter 和 setter 方法中,对属性的合法性进行判断。
我们来看一个 NBA 球员类Student
:
class Student {
// 姓名
String name;
// 年龄
int age;
}
在类内部(即类名后面{}
之间的区域)定义了成员属性name
和age
,我们知道,在类外部调用处可以对其属性进行修改:
Student player = new Student();
player.age = -1;
实例
public class Student {
// 姓名
String name;
// 年龄
int age;
public static void main(String[] args) {
Student player = new Student();
player.age = -1;
System.out.println(“球员年龄为:” + player.age);
}
}
运行结果:
球员年龄为:-1
我们通过对象名.属性名的方式对age
赋值为 -1
,显然,球员的年龄为-1
是反常理的。
下面我们对Student
类进行封装。
- 我们可以使用私有化访问控制符修饰类内部的属性,让其只在类的内部可以访问:
// 用private修饰成员属性,限定只能在当前类内部可以访问
private String name;
private int age;
private
关键字限定了其修饰的成员只能在类内部访问,这样之后就无法在类外部使用player.age =-1
这样的赋值方式进行赋值了。
- 创建公开的(public)
getter
和setter
方法:
package com.caq.oop.demo04;
//封装的核心 private
public class Student {
//属型私有
private String name;//名字
private int id;//学号
private char sex;//性别
private int age;
//提供一些可以操作的方法
//提供一些public的get,set方法
//get 获得这个数据
public String getName() {
return name;
}
//set 给这个数据设置值
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
[外链图片转存中…(img-7k82IbB0-1714696564845)]
[外链图片转存中…(img-IJyJ1Xo1-1714696564846)]