-
封装(Encapsulation):封装是指将数据和操作数据的方法捆绑在一起,形成一个独立的、不受外部干扰的单元。这样可以隐藏内部实现细节,只暴露必要的接口给外部使用,提高了安全性和模块化。
-
继承(Inheritance):继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而可以重用父类的代码并扩展其功能。通过继承,子类可以获取父类的特性,同时也可以重写父类的方法以符合自身需求。
-
多态(Polymorphism):多态是指相同的接口可以有不同的实现方式,或者说一个接口可以有多种不同的形态。在面向对象编程中,多态意味着子类可以以自己的方式实现父类的方法,
// 父类 Animal class Animal { public void makeSound() { System.out.println("动物发出声音"); } } // 子类 Dog 继承自 Animal class Dog extends Animal { @Override public void makeSound() { System.out.println("汪汪汪!"); } } // 子类 Cat 继承自 Animal class Cat extends Animal { @Override public void makeSound() { System.out.println("喵喵喵!"); } } public class PolymorphismExample { public static void main(String[] args) { Animal animal1 = new Dog(); // 使用父类引用指向子类对象 Animal animal2 = new Cat(); // 使用父类引用指向另一个子类对象 animal1.makeSound(); // 调用子类 Dog 的 makeSound() 方法 animal2.makeSound(); // 调用子类 Cat 的 makeSound() 方法 } }
在上述示例中,Animal 是父类,而 Dog 和 Cat 是其子类。父类 Animal 中定义了一个 makeSound() 方法,而子类 Dog 和 Cat 分别重写了这个方法。
在主函数中,首先通过父类引用 animal1 指向了子类对象 Dog,再通过父类引用 animal2 指向了子类对象 Cat。然后分别调用 animal1 和 animal2 的 makeSound() 方法。
由于多态性的存在,animal1 和 animal2 虽然是父类类型的引用,但在运行时会根据具体的对象类型而调用相应的重写方法。因此,animal1.makeSound() 会调用子类 Dog 的 makeSound() 方法,而 animal2.makeSound() 则会调用子类 Cat 的 makeSound() 方法。
这就是多态性的体现,相同的方法调用可以有不同的表现形式,取决于实际对象的类型。
-
同时客户端代码可以通过父类的引用调用这些方法,而无需关心具体的子类类型。