封装概述
为什么需要封装?
-
面向对象编程语言是对客观世界的模拟,客观世界里每一个事物的内部信息都是隐藏在对象内部的,外界无法直接操作和修改,只能通过指定的方式进行访问和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。
-
适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
-
通俗的讲,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
-
随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚、低耦合”:
-
高内聚:相关的功能和数据尽可能地组织在同一个类中,各个类内部数据操作细节自己完成,以确保其独立性。
-
低耦合:各个类之间的依赖关系应尽可能低。也就是说,一个类的变化应尽量减少对其他类的影响。有助于提高软件的可扩展性、可复用性和灵活性。
-
如何实现封装呢?
实现封装就是指控制类或成员的可见性范围?这就需要依赖访问控制修饰符,也称为权限修饰符来控制。
成员变量/属性私有化
在面向对象编程中,将成员变量(也称为属性)私有化是一种常见的做法。这样做的目的是保护数据,防止外部直接访问和修改,以确保数据的完整性和安全性。同时,通过提供公共的getter和setter方法来访问和修改这些私有变量,可以更好地控制对这些变量的访问和修改。
成员变量封装的目的
/**
* @ClassName ExtendDemo
* @Description TODO
* @Author 周一
* @Date 2024/4/15 14:11
* @Version 1.0
* 继承:继承上一代的属性和方法的特性
* 多个类成为子类也称为派生类
* 多个类抽出的父类也成为派生类
* 多个类抽出的父类也成为链类、超类
* 父类通用,子类更具体
* java只支持单继承
* 会先在本类中寻找,再去其他地方找
* 可通过ctrl+h查看继承关系 继承树.
* 可通过crtl +alt+u 图像化的方式查看继承关系
* 修饰符 本类 本包 其他包子类 其他包非子类
* private √
* 缺省(默认) √ √
* protected √ √ √
* public √ √ √ √
*
*
* 修饰符的可见范围
*/
实现步骤
使用 private
修饰成员变量
private 数据类型 变量名 ;
提供 getXxx
方法 / setXxx
方法,可以访问成员变量,代码如下:
public class Person {
private String name;
private int age;
private boolean marry;
}
public class Person {
private String name;
private int age;
private boolean marry;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
public void setMarry(boolean m){
marry = m;
}
public boolean isMarry(){
return marry;
}
}
package com.haogu.encapsulation;
public class TestPerson {
public static void main(String[] args) {
Person p = new Person();
//实例变量私有化,跨类是无法直接使用的
/* p.name = "张三";
p.age = 23;
p.marry = true;*/
p.setName("张三");
System.out.println("p.name = " + p.getName());
p.setAge(23);
System.out.println("p.age = " + p.getAge());
p.setMarry(true);
System.out.println("p.marry = " + p.isMarry());
}
}
IDEA自动生成get/set方法模板
-
大部分键盘模式按Alt + Insert键。
-
部分键盘模式需要按Alt + Insert + Fn键。
继承
继承的概述
继承有延续(下一代延续上一代的基因、财富)、扩展(下一代和上一代又有所不同)的意思。
继承的好处
-
提高代码的复用性。
-
提高代码的扩展性。
-
表示类与类之间的is-a关系
继承的语法格式
格式:
【修饰符】 class 父类 {
...
}
【修饰符】 class 子类 extends 父类 {
...
}
继承的特点
1.子类会继承父类所有的实例变量和实例方法
2.Java只支持单继承,不支持多重继承
3.Java支持多层继承(继承体系)
4.一个父类可以同时拥有多个子类