Java作为一门广泛应用的编程语言,其面向对象编程特性是支撑企业级开发、安卓开发等多个领域的重要基础,理解这些核心概念是学好Java的关键。

类与对象的关系
类是面向对象编程的基本模板,它定义了某一类事物的共同属性和行为,而对象是类的具体实例。比如我们可以定义一个Person类,描述所有人的姓名、年龄属性和吃饭、走路的行为,再通过这个类创建具体的张三、李四等对象。
下面通过一个简单的代码示例展示类的定义和对象的创建:
// 定义Person类
class Person {
// 属性:姓名
String name;
// 属性:年龄
int age;
// 行为:吃饭
public void eat() {
System.out.println(name + "正在吃饭");
}
// 行为:走路
public void walk() {
System.out.println(name + "正在走路");
}
}
public class Main {
public static void main(String[] args) {
// 创建Person类的对象张三
Person zhangSan = new Person();
zhangSan.name = "张三";
zhangSan.age = 20;
zhangSan.eat();
zhangSan.walk();
// 创建Person类的对象李四
Person liSi = new Person();
liSi.name = "李四";
liSi.age = 22;
liSi.eat();
}
}
封装特性
封装是面向对象编程的核心特性之一,它的核心思想是将类的属性和实现细节隐藏起来,只对外提供公共的访问方式,这样可以提高代码的安全性,也方便后续修改类的内部实现而不影响外部调用。
在Java中,我们通常使用private关键字修饰类的属性,然后通过public的getter和setter方法来访问和修改这些属性,这就是封装的典型实现。
class Student {
// 用private修饰属性,实现隐藏
private String name;
private int score;
// 对外提供getter方法获取姓名
public String getName() {
return name;
}
// 对外提供setter方法设置姓名
public void setName(String name) {
this.name = name;
}
// 对外提供getter方法获取分数
public int getScore() {
return score;
}
// 对外提供setter方法设置分数,同时可以添加校验逻辑
public void setScore(int score) {
if (score >= 0 && score <= 100) {
this.score = score;
} else {
System.out.println("分数必须在0到100之间");
}
}
}
继承特性
继承允许一个类(子类)继承另一个类(父类)的属性和方法,子类还可以扩展自己的属性和方法,或者重写父类的方法。继承可以减少代码重复,提高代码的复用性,同时也能体现类之间的层级关系。
在Java中,使用extends关键字实现继承,所有的类都默认继承Object类。需要注意的是,Java只支持单继承,一个子类只能有一个直接父类。
// 定义父类Animal
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void sleep() {
System.out.println(name + "正在睡觉");
}
}
// 定义子类Dog继承Animal
class Dog extends Animal {
// 子类扩展自己的属性
private String breed;
public Dog(String name, String breed) {
// 调用父类的构造方法
super(name);
this.breed = breed;
}
// 重写父类的sleep方法
@Override
public void sleep() {
System.out.println(name + "是" + breed + ",正在狗窝里睡觉");
}
// 子类自己的方法
public void bark() {
System.out.println(name + "正在汪汪叫");
}
}
多态特性
多态指的是同一个行为具有多个不同表现形式的能力,在Java中,多态主要通过方法重写和方法重载实现,更常见的是父类引用指向子类对象的形式。多态可以让代码更灵活,降低代码的耦合度。
当使用父类类型的引用指向子类对象时,调用重写的方法会执行子类的方法实现,这就是运行时多态的核心体现。
class Shape {
public void draw() {
System.out.println("绘制图形");
}
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
public class Test {
public static void main(String[] args) {
// 父类引用指向子类对象,体现多态
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.draw(); // 输出绘制圆形
shape2.draw(); // 输出绘制矩形
}
}
核心概念对比
为了更清晰地区分三个核心特性的作用,我们可以通过下表进行对比:
| 核心特性 | 核心作用 | 实现方式 |
|---|---|---|
| 封装 | 隐藏实现细节,提高安全性和易维护性 | private修饰属性,提供getter/setter方法 |
| 继承 | 提高代码复用性,体现类层级关系 | extends关键字,子类继承父类 |
| 多态 | 提高代码灵活性,降低耦合度 | 方法重写,父类引用指向子类对象 |
学习建议
掌握Java面向对象编程核心概念不能只靠记忆定义,要多写实际的代码示例,尝试自己定义类、实现继承和多态的场景。可以先从简单的学生、动物等场景入手,逐步过渡到更复杂的业务场景。同时要注意理解每个特性解决的问题,这样才能在实际开发中灵活运用这些特性,写出更优质的Java代码。