java中的继承和多态

在Java中,继承和多态是面向对象编程的重要特性。让我们分别了解一下这两个概念以及如何在Java中使用它们。

继承 (Inheritance)

继承允许你定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。继承的一个主要优点是可以复用代码并减少冗余。

示例代码

假设我们有一个基类 Vehicle 和两个子类 CarTruck

 
1// 基类 Vehicle
2public class Vehicle {
3    private String brand;
4    private int year;
5
6    public Vehicle(String brand, int year) {
7        this.brand = brand;
8        this.year = year;
9    }
10
11    public String getBrand() {
12        return brand;
13    }
14
15    public int getYear() {
16        return year;
17    }
18
19    // 公共方法
20    public void displayInfo() {
21        System.out.println("Brand: " + brand + ", Year: " + year);
22    }
23}
24
25// 子类 Car
26public class Car extends Vehicle {
27    private int numberOfDoors;
28
29    public Car(String brand, int year, int numberOfDoors) {
30        super(brand, year);
31        this.numberOfDoors = numberOfDoors;
32    }
33
34    public int getNumberOfDoors() {
35        return numberOfDoors;
36    }
37
38    @Override
39    public void displayInfo() {
40        super.displayInfo();
41        System.out.println("Number of Doors: " + numberOfDoors);
42    }
43}
44
45// 子类 Truck
46public class Truck extends Vehicle {
47    private double payloadCapacity;
48
49    public Truck(String brand, int year, double payloadCapacity) {
50        super(brand, year);
51        this.payloadCapacity = payloadCapacity;
52    }
53
54    public double getPayloadCapacity() {
55        return payloadCapacity;
56    }
57
58    @Override
59    public void displayInfo() {
60        super.displayInfo();
61        System.out.println("Payload Capacity: " + payloadCapacity + " tons");
62    }
63}
64
65// 主类
66public class Main {
67    public static void main(String[] args) {
68        Car car = new Car("Toyota", 2022, 4);
69        Truck truck = new Truck("Ford", 2021, 2.5);
70
71        car.displayInfo();
72        truck.displayInfo();
73    }
74}

在这个例子中,Vehicle 是基类,它具有品牌和制造年份属性。CarTruck 分别是 Vehicle 的子类,它们都有自己的特定属性。displayInfo() 方法在 Vehicle 类中定义,并在子类中被覆写以提供额外的信息。

多态 (Polymorphism)

多态是指一个接口可以有多种不同的实现方式。在Java中,多态可以通过方法重载和方法覆写来实现。方法重载是在同一个类中使用相同的方法名但参数列表不同;方法覆写是在子类中重新定义父类的方法。

示例代码

在上述示例中,我们已经展示了方法覆写来实现多态。现在,我们来看一个使用方法重载的例子:

 
1// 主类
2public class Main {
3    public static void main(String[] args) {
4        Vehicle vehicle = new Vehicle("Honda", 2020);
5        Car car = new Car("Toyota", 2022, 4);
6        Truck truck = new Truck("Ford", 2021, 2.5);
7
8        vehicle.displayInfo();
9        car.displayInfo();
10        truck.displayInfo();
11
12        // 多态示例 - 使用父类引用指向子类对象
13        Vehicle v1 = car;  // Upcasting
14        Vehicle v2 = truck; // Upcasting
15
16        v1.displayInfo();
17        v2.displayInfo();
18
19        if (v1 instanceof Car) { // Downcasting
20            Car c = (Car) v1;
21            System.out.println("Number of Doors: " + c.getNumberOfDoors());
22        }
23
24        if (v2 instanceof Truck) {
25            Truck t = (Truck) v2;
26            System.out.println("Payload Capacity: " + t.getPayloadCapacity() + " tons");
27        }
28    }
29}

在这个示例中,我们使用了父类 Vehicle 的引用指向子类的对象,这是多态的一种形式。此外,我们还展示了向下转型(downcasting),即从父类引用转换到子类引用,以便访问子类特有的方法。

总结

  • 继承:允许子类继承父类的属性和方法,可以减少代码重复。
  • 多态:允许使用父类的引用调用子类的方法,提高了代码的灵活性和可扩展性
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java继承多态,简单来说,继承是指一个类可以基于另一个类来创建自己的成员变量和方法,而多态则是指不同的对象可以以相同的方式进行处理。 下面是一个简单的继承示例: ``` class Animal { public void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { public void sound() { System.out.println("Dog barks"); } } class Cat extends Animal { public void sound() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] args) { Animal a = new Animal(); Animal d = new Dog(); Animal c = new Cat(); a.sound(); d.sound(); c.sound(); } } ``` 在这个示例,我们定义了一个基类 `Animal`,这个类有一个 `sound` 方法,然后我们又定义了两个子类 `Dog` 和 `Cat`,它们都继承了 `Animal` 类,并且重写了 `sound` 方法。在 `Main` 类,我们分别创建了一个基类对象和两个子类对象,并调用了它们的 `sound` 方法。由于子类重写了基类的 `sound` 方法,因此调用子类对象的 `sound` 方法时输出的内容也不同。 接下来,我们来看一下多态的示例: ``` class Shape { public void draw() { System.out.println("Drawing a shape"); } } class Circle extends Shape { public void draw() { System.out.println("Drawing a circle"); } } class Square extends Shape { public void draw() { System.out.println("Drawing a square"); } } public class Main { public static void main(String[] args) { Shape s1 = new Circle(); Shape s2 = new Square(); s1.draw(); s2.draw(); } } ``` 在这个示例,我们定义了一个基类 `Shape`,这个类有一个 `draw` 方法,然后我们又定义了两个子类 `Circle` 和 `Square`,它们都继承了 `Shape` 类,并且重写了 `draw` 方法。在 `Main` 类,我们分别创建了一个 `Circle` 对象和一个 `Square` 对象,并将它们赋值给一个类型为 `Shape` 的变量。然后,我们调用了这两个变量的 `draw` 方法。由于这两个变量实际上分别指向了 `Circle` 对象和 `Square` 对象,因此它们在调用 `draw` 方法时输出的内容也不同。这就是多态的作用,即不同的对象可以以相同的方式进行处理。 希望这个简单的示例能够帮助你理解继承多态的概念和用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值