1.继承
-
继承是面向对象编程中的一个基本特征,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。子类可以添加新的属性和方法,也可以重写父类的方法。这使得子类可以在父类的基础上进行扩展和特化。
-
例:在该例子中,Dog 类继承了 Animal 类,并重写了makeSound 方法。所以当我们创建一个 Dog 对象并调用makeSound 方法时,将会打印出 "The dog is eating"。
// 基类 Animal public class Animal { public void eat() { System.out.println("The animal is eating"); } } // 派生类 Dog public class Dog extends Animal { public void eat() { System.out.println("The dog is eating"); } } // 测试类 public class Test { public static void main(String[] args) { Animal a = new Animal(); a.eat(); Dog d = new Dog(); d.eat(); } }
2.多态
- 多态是面向对象编程的三大特性之一,它允许我们使用一个接口来表示多种形式的实现。具体来说,多态允许我们在运行时根据对象的实际类型来执行对应的方法。在Java中,多态主要通过接口、继承和重载来实现。
- 例:在这个例子中,我们有一个 Shape 基类,它有一个抽象的 area 方法。然后我们创建了两个派生类 Circle 和 Rectangle,它们都继承了 Shape 并实现了 area 方法。虽然这两个派生类的 area 方法实现不同,但我们可以使用一个 Shape 类型的引用来引用它们,并在运行时调用正确的 area 方法。即多态的表现
// 基类 Shape public abstract class Shape { public abstract double area(); } // 派生类 Circle public class Circle extends Shape { private double radius; public Circle(double radius) { this.radius = radius; } public double area() { return Math.PI * radius * radius; } } // 派生类 Rectangle public class Rectangle extends Shape { private double width; private double height; public Rectangle(double width, double height) { this.width = width; this.height = height; } public double area() { return width * height; } } // 测试类 public class Test { public static void main(String[] args) { Shape shape1 = new Circle(5); Shape shape2 = new Rectangle(4, 6); System.out.println(shape1.area()); // 输出圆的面积 System.out.println(shape2.area()); // 输出矩形的面积 } }
3.继承和多态的区别小结
- 继承是从已有的类创建新类的一种方式,让我们可以定义一个类来继承另一个类的属性和方法。而多态则是允许我们使用父类引用指向子类对象(如上例中Shape shape1 = new Circle(5);),并在运行时动态地确定要执行哪个子类的方法。
- 继承是“is-a”的关系,比如狗是一种动物。而多态则是“像”的关系,比如我们可以把一只狗当作动物来处理。
- 继承主要可以让我们避免重复编写相同的代码。而多态则主要用于实现灵活性和扩展性,它可以让我们的代码更容易地适应未来的变化。