【java第19集】java面向对象编程详解
文章目录
- 一、面向对象的核心思想
- 二、类与对象
- 1. 类(Class)
- 2. 对象(Object)
- 3. 代码示例
- 三、封装(Encapsulation)
- 1. 定义
- 2. 核心思想
- 3. 代码示例
- 4. 应用场景
- 四、继承(Inheritance)
- 1. 定义
- 2. 核心思想
- 3. 代码示例
- 4. 关键字
- 五、多态(Polymorphism)
- 1. 定义
- 2. 多态的类型
- 3. 代码示例
- 4. 应用场景
- 六、抽象类(Abstract Class)
- 七、接口(Interface)
- 八、构造方法(Constructor)
- 九、`this` 和 `super` 关键字
- 总结
Java的面向对象编程(Object-Oriented Programming, OOP)是Java语言的核心思想,其核心目标是通过类和对象的抽象,将复杂的现实问题分解为可管理的模块化代码。以下是Java面向对象思想的详细介绍:
一、面向对象的核心思想
面向对象编程(OOP)的三大核心特性是:
- 封装(Encapsulation)
- 继承(Inheritance)
- 多态(Polymorphism)
这三大特性共同构成了Java程序设计的基础,帮助开发者构建模块化、可复用和易维护的代码。
二、类与对象
1. 类(Class)
- 定义:类是对象的模板,描述了一类事物的属性(数据)和行为(方法)。
- 特点:类是抽象的,例如“人类”是一个类,包含属性(如姓名、年龄)和行为(如吃饭、走路)。
2. 对象(Object)
- 定义:对象是类的具体实例,是实际存在的个体。
- 特点:对象是具体的,例如“张三”是“人类”的一个实例。
3. 代码示例
// 定义类
public class Person {// 属性(字段)private String name;private int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 行为(方法)public void eat() {System.out.println(name + " is eating.");}
}// 创建对象
public class Main {public static void main(String[] args) {Person person = new Person("Alice", 25);person.eat(); // 调用对象的方法}
}
三、封装(Encapsulation)
1. 定义
- 将对象的数据(属性)和操作数据的方法(行为)捆绑在一起,并通过访问控制符(
private
、public
等)限制外部对内部实现的直接访问。
2. 核心思想
- 隐藏实现细节:外部只能通过公开的接口(getter/setter)与对象交互,而无需了解内部实现。
- 数据保护:防止非法操作导致数据不一致。
3. 代码示例
public class BankAccount {// 私有属性:外部无法直接访问private double balance;// 公开的getter/setterpublic double getBalance() {return balance;}public void deposit(double amount) {if (amount > 0) {balance += amount;} else {System.out.println("存款金额必须为正数");}}
}
4. 应用场景
- 安全性要求高的场景:如银行账户、用户权限管理。
- 简化接口设计:通过封装减少外部依赖。
四、继承(Inheritance)
1. 定义
- 子类通过继承父类,可以复用父类的属性和方法,从而实现代码复用和扩展。
2. 核心思想
- 代码复用:避免重复编写相同功能的代码。
- 层次化设计:通过继承构建类的层次结构(如动物类 → 狗类 → 哈士奇类)。
3. 代码示例
// 父类
public class Animal {public void eat() {System.out.println("Animal is eating.");}
}// 子类继承父类
public class Dog extends Animal {@Overridepublic void eat() {System.out.println("Dog is eating bones.");}public void bark() {System.out.println("Dog is barking.");}
}// 使用继承
public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.eat(); // 调用子类重写的方法dog.bark(); // 调用子类特有方法}
}
4. 关键字
extends
:用于类的继承。super
:调用父类的构造方法或方法。
五、多态(Polymorphism)
1. 定义
- 同一操作作用于不同的对象,可以有不同的解释和行为。
- 核心思想:通过方法重写和动态绑定实现灵活性。
2. 多态的类型
- 编译时多态(静态多态):方法重载(Overloading)。同一个类中可以有多个同名方法,只要它们的参数列表不同(参数类型、数量或顺序)。
- 运行时多态(动态多态):方法重写(Overriding)和父类引用指向子类对象。子类继承父类方法,方法相同,参数类型一样。
3. 代码示例
// 方法重写实现多态
public class Animal {public void sound() {System.out.println("Animal makes a sound.");}
}public class Cat extends Animal {@Overridepublic void sound() {System.out.println("Cat meows.");}
}public class Main {public static void main(String[] args) {Animal myAnimal = new Cat(); // 父类引用指向子类对象myAnimal.sound(); // 输出 "Cat meows."}
}
4. 应用场景
- 通用接口设计:如支付系统中的
PayStrategy
接口,支持多种支付方式(支付宝、微信)。 - 框架开发:如 Java 的集合框架(
List
接口的多种实现类)。
六、抽象类(Abstract Class)
-
定义:包含抽象方法(没有实现的方法)的类,不能直接实例化。
-
用途:作为其他类的基类,强制子类实现特定方法。
-
代码示例:
public abstract class Shape {public abstract double area(); // 抽象方法 }public class Circle extends Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double area() {return Math.PI * radius * radius;} }
七、接口(Interface)
-
定义:接口是比抽象类更抽象的“类”,可以包含常量、抽象方法和默认方法。
-
用途:实现多重继承(Java 不支持类的多继承,但一个类可以实现多个接口)。
-
代码示例:
public interface Flyable {void fly(); // 抽象方法 }public class Bird implements Flyable {@Overridepublic void fly() {System.out.println("Bird is flying.");} }
八、构造方法(Constructor)
-
特点:
- 与类名相同,无返回值。
- 用于初始化对象。
- 可以重载(多个构造方法)。
-
代码示例:
public class Student {private String name;private int age;// 无参构造方法public Student() {}// 有参构造方法public Student(String name, int age) {this.name = name;this.age = age;} }
九、this
和 super
关键字
this
:指向当前对象的引用,用于区分成员变量和局部变量。super
:指向父类对象的引用,用于调用父类的构造方法或方法。- 代码示例:
public class Parent {public Parent() {System.out.println("Parent constructor");} }public class Child extends Parent {public Child() {super(); // 调用父类构造方法System.out.println("Child constructor");} }
总结
Java的面向对象思想通过类和对象的抽象,将现实世界的问题转化为程序中的模块化设计。其核心特性(封装、继承、多态)和工具(接口、抽象类、访问控制)共同提升了代码的复用性、可维护性和扩展性。
- 面向对象开发优势
- 代码复用:通过继承和组合减少重复代码。
- 安全性:封装保护数据,防止非法访问。
- 灵活性:多态支持动态行为,适应不同场景。
- 可维护性:模块化设计便于调试和升级。