前言: 今天我们就聊一聊最基础的,面向对象的三大特征。这个其实很重要,我们有些概念理解的并不是很清楚,所以今天在这里整理一下。 封装 概念 封装是面向对象编程的核心思想
前言:
今天我们就聊一聊最基础的,面向对象的三大特征。这个其实很重要,我们有些概念理解的并不是很清楚,所以今天在这里整理一下。
封装
概念
封装是面向对象编程的核心思想。指的就是将描述某种实体的数据和基于这些数的操作集合到一起,形成一个封装体。
封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类的内部数据,这样降低了对内部数据的影响,提高了程序的安全性和可维护性。
好处
- 只能通过规定方法访问数据
- 隐藏类实现细节
- 方便修改实现
- 方便加入控制语句
使用
- 修改属性的可见性 ----- 设置为private
- 创建共有的getter/setter方法 ----- 用于属性的读写
- 在getter/setter方法中加入属性控制语句 ----- 对属性值的合法性进行判断
在这里也把四个Java权限修饰符写出来:
- private 只能在当前类中访问
- default 只能在当前类以及同一个包下访问
- protected 除了当前类以及同一个包下访问外,还为不在同一个包下的子类提供了一种访问父类成员的方式。
- public 同一个工程下的所有包均可访问
this关键字
三个应用:
- this调用本类中的属性,也就是类中的成员变量。
- this调用本类中的其他方法
- this调用本类中的其他构造方法,调用时要放在构造方法的首行。
举例:
public class Demo1 {
private int num;
public Demo1(){
this(1);
}
public Demo1(int num)
{
this.num = this.fun();
System.out.println(this.num);
}
public int fun(){
return this.num = 100;
}
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
}
}
继承
概念
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或类从父类继承方法,使得子类具有父类相同的行为。
特点
- 继承鼓励类的重用
- 继承可以多层继承
- 一个类只能继承一个父类
- 父类中的private修饰的不能被继承
- 构造方法不能被继承
使用
- 编写父类,有公共的属性和方法
- 编写子类,继承父类,子类继承父类只能继承一个父类,继承关键字extends。
- 子类访问父类成员
- 访问父类构造方法
- super(): 父类无参的构造方法
- super(name): 父类有参的构造方法
- 访问父类的属性
- super.name
- 访问父类的方法
- super.方法名()
super关键字
- super只能出现在子类的方法和构造方法中
- super调用构造方法时,只能是第一句
- super不能访问父类的private成员
继承限制与初始化顺序
子类不能继承 :
- private成员
- 子类与父类不在同包,使用默认访问权限(default)的成员
- 构造方法
多重继承关系的初始化顺序
- 父类属性
- 父类构造方法
- 子类属性
- 子类构造方法
方法重写
- 在子类可以根据需要对父类中继承来的方法进行重写
- 重写的方法和被重写的方法必须具有相同的名称、参数列表和返回类型
- 重写方法不能使用被重写的方法更具严格的访问权限
多态
概念
程序中的多态:父类引用,子类对象
同一个事务,由于条件不同,产生的结果也就不同
多态:同一个引用类型,使用不同的实例而执行不同操作。指的就是在应用程序中出现的重名现象。
将父类对象应用于子类对象的特征就是面向对象编程中的多态性的体现。
多态指的就是在应用程序中出现的“重名”现象。多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类以及相关类。这样既降低了维护难度,有节省了时间,
实现多态的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
多态性变现
- 方法重写
- 抽象类
- 接口