在 Java 中,封装、继承、多态 是面向对象编程(OOP)的三大核心特性。它们共同构建了代码的可维护性、复用性和灵活性。以下是详细解释和示例:
将对象的属性和方法包装在一起,并对外隐藏实现细节,仅通过受控的接口访问数据。
private
修饰属性,禁止直接访问。public
的 getter/setter 方法操作属性。javapublic class Student {
private String name;
private int age;
// Getter 方法
public String getName() {
return name;
}
// Setter 方法(可添加逻辑校验)
public void setAge(int age) {
if (age > 0) {
this.age = age;
} else {
System.out.println("年龄无效");
}
}
}
子类继承父类的属性和方法,实现代码复用和层次化设计。通过 extends
关键字实现。
super()
(父类无参构造)。@Override
注解)。Animal
→ Dog
)。javaclass Animal {
void eat() {
System.out.println("动物在进食");
}
}
class Dog extends Animal {
@Override
void eat() {
System.out.println("狗在啃骨头");
}
void bark() {
System.out.println("汪汪叫");
}
}
// 使用
Animal dog = new Dog();
dog.eat(); // 输出:狗在啃骨头(多态)
// dog.bark(); // 错误!父类引用无法调用子类特有方法
同一操作作用于不同对象时,产生不同的行为。分为 编译时多态(方法重载)和 运行时多态(方法重写)。
Animal a = new Dog();
)。javaclass Animal {
void sound() {
System.out.println("动物发出声音");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("喵喵喵");
}
}
class Bird extends Animal {
@Override
void sound() {
System.out.println("叽叽喳喳");
}
}
// 测试多态
public class Test {
public static void main(String[] args) {
Animal[] animals = {new Cat(), new Bird()};
for (Animal a : animals) {
a.sound(); // 同一方法,不同表现
}
}
}
List list = new ArrayList();
特性 | 核心目标 | 关键实现方式 |
---|---|---|
封装 | 隐藏细节,保护数据 | private + getter/setter |
继承 | 代码复用,建立层次结构 | extends + 方法重写 |
多态 | 灵活扩展,统一接口 | 方法重写 + 向上转型 |
封装是否必须使用 getter/setter?
不是必须,但推荐使用以控制数据访问。
继承会继承父类的私有属性吗?
会继承,但无法直接访问(需通过父类的公共方法)。
如何区分重载 (Overload) 和重写 (Override)?
多态中能否调用子类特有方法?
需要向下转型:
javaif (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.bark();
}
掌握这三大特性,可以更高效地设计健壮的 Java 程序!
本文作者:宁小健
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!