多态(Polymorphism)

简介: 多态(Polymorphism)

多态(Polymorphism)
多态是面向对象编程中的一个核心概念,它允许我们以统一的接口来处理不同类型的对象。
在Java中,多态通常通过继承和接口实现。
上面我们知道了多个子类可以通过继承父类来继承父类的属性和方法,然后对父类的方法进行不同的覆盖实现。
多态的原理就是基于类的继承关系:当子类继承父类时,子类会继承父类的所有公有(public)和受保护(protected)的成员变量和方法。
这样,我们就可以使用父类的引用来指向子类的对象,而调用方法时,会根据实际的对象类型来执行相应的方法。
// 父类
class Animal {
public void makeSound() {
System.out.println("动物叫声");
}
}
// 子类
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪叫");
}
}
// 子类
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵叫");
}
}

  // 使用多态
  public class Main {
      public static void main(String[] args) {
          Animal dog = new Dog();
          Animal cat = new Cat();
          dog.makeSound(); // 输出:汪汪叫
          cat.makeSound(); // 输出:喵喵叫
      }
  }
  在上面的例子中,我们定义了一个父类 Animal 和两个子类 Dog 和 Cat。
  子类都覆盖了父类的 makeSound 方法。
  我们创建了 Animal 类型的引用,但实际上指向了 Dog 和 Cat 的对象。当我们调用 makeSound 方法时,会根据实际的对象类型来执行相应的方法,这就是多态的概念。
  同样都是makeSound(),但是不同对象调用后就会有不同的实现,狗是汪汪,猫是喵喵。
  还有一种多态的实现,是用接口实现。
  接口是什么呢?
  接口是一种抽象类型,它允许我们定义一组方法,而不需要实现这些方法。
  通过用类来实现接口,类就可以使用接口类型的引用来指向实现接口的类的对象,而调用方法时,会执行类实现的相应方法。
  所以接口就相当于一个父类,但是接口不需要像父类一样有自己的实现:
  // 这样就定义了一个接口。
  interface Flyable {
      //飞
      void fly();
  }
  // 实现接口的类
  class Bird implements Flyable {
      @Override
      public void fly() {
          System.out.println("鸟儿飞翔");
      }
  }
  // 实现接口的类
  class Airplane implements Flyable {
      @Override
      public void fly() {
          System.out.println("飞机飞行");
      }
  }

  // 使用多态
  public class Main {
      public static void main(String[] args) {
          Flyable bird = new Bird();
          Flyable airplane = new Airplane();
          bird.fly(); // 输出:鸟儿飞翔
          airplane.fly(); // 输出:飞机飞行
      }
  }
  我们定义了一个接口 Flyable 和两个实现接口的类 Bird 和 Airplane。在 Main 类中,我们创建了 Flyable 类型的引用,但实际上指向了 Bird 和 Airplane 的对象。当我们调用 fly 方法时,会根据实际的对象类型来执行相应的方法。
目录
相关文章
|
15天前
|
编译器 C++
c++中的多态
c++中的多态
|
4月前
|
Java
多态(Polymorphism)
多态(Polymorphism)
35 1
|
4月前
|
存储 编译器 数据安全/隐私保护
【C++】多态
多态是面向对象编程中的重要特性,允许通过基类引用调用派生类的具体方法,实现代码的灵活性和扩展性。其核心机制包括虚函数、动态绑定及继承。通过声明虚函数并让派生类重写这些函数,可以在运行时决定具体调用哪个版本的方法。此外,多态还涉及虚函数表(vtable)的使用,其中存储了虚函数的指针,确保调用正确的实现。为了防止资源泄露,基类的析构函数应声明为虚函数。多态的底层实现涉及对象内部的虚函数表指针,指向特定于类的虚函数表,支持动态方法解析。
45 1
|
10月前
|
C++
c++多态
c++多态
74 0
|
6月前
|
Java 编译器
多态
多态
24 2
|
9月前
|
Java
面向对象高级-多态
面向对象高级-多态
21 1
|
C++
多态(C++)下
多态(C++)
90 0
多态你真的了解吗?
多态你真的了解吗?
83 0
什么是多态?
什么是多态?
84 0
|
10月前
|
编译器 C++
【C++】:多态
【C++】:多态
72 0