封装、继承和多态是面向对象编程(OOP)的三个核心概念。下面我将分别解释这些概念,并给出相应的示例。
封装
概念:封装是将数据(变量)和操作数据的方法(函数)组合到一个类中,并通过访问修饰符(如public、private、protected)来限制对数据的访问级别。封装可以隐藏类的内部实现细节,只提供必要的接口与外部交互,从而增强代码的安全性和可维护性。
示例:
public class Person { | |
private String name; // 私有变量,只能在类内部访问 | |
private int age; | |
// 提供公共的getter和setter方法来访问和修改私有变量 | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public int getAge() { | |
return age; | |
} | |
public void setAge(int age) { | |
this.age = age; | |
} | |
} |
继承
概念:继承允许我们创建一个新的类(子类或派生类),它继承自一个已存在的类(父类或基类)的属性和方法。子类可以添加新的属性和方法,也可以重写父类的方法。继承提高了代码的复用性,使得代码更加易于维护和管理。
示例:
public class Animal { | |
void eat() { | |
System.out.println("Animal eats"); | |
} | |
} | |
public class Dog extends Animal { // Dog类继承自Animal类 | |
void bark() { | |
System.out.println("Dog barks"); | |
} | |
// 重写父类的eat方法 | |
@Override | |
void eat() { | |
System.out.println("Dog eats dog food"); | |
} | |
} |
多态
概念:多态是指同一操作作用于不同的对象,可以有不同的解释和执行结果。在Java中,多态主要通过方法的重写(Override)和重载(Overload)来实现。同时,多态也体现在父类引用指向子类对象时,可以调用子类重写后的方法。
示例(重写导致多态):
public class Main { | |
public static void main(String[] args) { | |
Animal animal = new Dog(); // 父类引用指向子类对象 | |
animal.eat(); // 输出 "Dog eats dog food",因为Dog类重写了eat方法 | |
} | |
} |
示例(重载导致多态,但重载通常不直接涉及子类与父类的关系):
public class Calculator { | |
// 重载add方法,接受两个int参数 | |
int add(int a, int b) { | |
return a + b; | |
} | |
// 重载add方法,接受两个double参数 | |
double add(double a, double b) { | |
return a + b; | |
} | |
public static void main(String[] args) { | |
Calculator calc = new Calculator(); | |
int sum1 = calc.add(2, 3); // 调用int版本的add方法 | |
double sum2 = calc.add(2.5, 3.5); // 调用double版本的add方法 | |
System.out.println("Sum1: " + sum1); // 输出 "Sum1: 5" | |
System.out.println("Sum2: " + sum2); // 输出 "Sum2: 6.0" | |
} | |
} |
以上示例展示了面向对象编程中封装、继承和多态的基本概念及其用法。