Java—面向对象编程 #

对象是一种特殊的数据结构,可以用来记住一个事物的数据
Java 面向对象编程(OOP)速览
1. 核心思想 #
- 万物皆对象:数据与行为打包在类的实例中
- 抽象建模:用“名词”找类,用“动词”找方法
- 面向接口编程:面向能力而非实现,解耦与可替换
2. 三大特性 #
- 封装:隐藏实现细节,通过公开方法暴露能力
- 访问控制:private、default、protected、public
- 继承:is‑a 关系,复用父类代码,支持层次结构
- Java 只支持单继承,可多实现接口
- 多态:父类引用指向子类实例,运行时根据实际类型分派方法
- 覆盖 override vs 重载 overload
- 抽象:抽象类与接口抽离共性,约束实现
注:封装思想将数据和对数据的处理放在同一个类里,避免写重复代码和隐藏细节
public class Star {
String name;
int age;
double height;
double weight;//对象的属性变量
public void pointStar() {// 处理对象属性的方法
System.out.println(" printing " + name);
System.out.println(" printing " + age);
System.out.println(" printing " + height);
System.out.println(" printing " + weight);
}
}
3. 类与对象的基础 #
- 先设计类:
class - 类的组成:字段 field、方法 method、构造器 constructor、代码块、内部类
- 构造器:用于初始化对象;可重载;无返回值;若无显式构造器会有默认无参构造
- this 与 super:
- 初始化顺序:静态代码块 → 实例代码块 → 构造器;父类先于子类
4. 类的基本语法 #
4.1 构造器 #
根据参数来自动调用构造器→ 创建符合要求的对象并根据参数进行对象属性初始化
//特殊方法,没有返回值类型,名称是类名 // 无参构造器 public Star() {} // 有参构造器 public Star(String name, int age, double height, double weight) { }
4.2 this #
this是一个变量,是方法的对象,根据this可以访问这个对象的信息
public class Student { public void pointStudent() { // 哪个对象调用这个方法,this就是哪个对象 System.out.println(this); } }a学生对象的地址
- this真要去解决变量名称冲突的问题
4.3 封装 #
合理隐藏,合理暴露
private来隐藏属性变量,只能在类里访问
利用
public来修饰Get()和 Set()方法来复制属性(控制变量)
4.4 javabean #
特殊类(实体类)
要求
- 类中成员变量全部私有,并提供set、get方法
- 必须提供无参构造器,有参构造器可选
使用场景和作用
- 实体类只负责数据存储
- 对数据的业务处理交给其他另一个专门处理业务的对象(实现数据与业务的分离)
4.5 static #
修饰 成员变量和成员方法
- 静态变量(类变量):→ 有
static修饰,属于类,在计算机里只有一份,会被类的全部对象共享 - 实例变量(对象的变量):→ 无
static修饰,属于每个对象
public class Student{
static String name;//静态变量
int age;//实例变量
}
//直接用类去访问
- 静态方法: 有
static修饰,属于类 - 实例方法:无
static修饰,属于每个对象
只为了实现一个功能,且不需要直接访问对象的数据,就定义成静态方法
应用场景
-
做工具类:提高代码复用,调用方便,提高效率(工具类没有必要创建对象,所以建议私有化构造器)
private Utils() {}//不能创建对象的作用4.6 继承
4.6 继承 #
作用:日高代码的重用性,减少代码的书写,
关键字
extends
- 子类能继承父类的非私有成员(成员变量和成员方法)
- 子类对象是由父类和子类共同创建的
注
- 权限修饰符:修饰下肢类中的成员能被访问的范围
- private
- 缺省:本类、同一个包内访问
- protected:本类、同一个包内访问、子孙内访问
- public:任意位置
- 继承的特点
- 单继承:一个只能继承一个直接父类
- 多层继承:JAVA不支持多继承,但是可以进行多层继承
- 祖先类:JAVA中的所有类都是Object类的子类
- 就近原则:优先访问自己类中,没有才会访问父类
- 用
super关键字访问父类的同名成员,类似于this
- 方法重写
- 子类重写父类的同名方法(方法名和形参列表必须一样)
- 建议加上
@Override校验注解(重写的标志) - 权限要大于等于父类的重写方法
- 返回值类型要一样或者更小
- 私有和静态方法不能重写
- 构造器
- 创建子类对象时,会先执行父类的构造器然后再执行父类构造器
this可以调用兄弟构造器
4.7 多态 #
继承时表现的一种现象:对象多态和行为多态
- 变量没有多态性,对象多态会继承父类的变量
- 好处是:
- 解耦合,便于扩展维护,模块化
- 父类类型变量作为参数,接受子类对象
- 多态下不能调用子类的独有功能
- 强制类型转换可以解决多态下不能调用子类的独有功能
- 在强制转换前,应该先判断对象类型
