多态(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 和两个子类 DogCat。
  子类都覆盖了父类的 makeSound 方法。
  我们创建了 Animal 类型的引用,但实际上指向了 DogCat 的对象。当我们调用 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 和两个实现接口的类 BirdAirplane。在 Main 类中,我们创建了 Flyable 类型的引用,但实际上指向了 BirdAirplane 的对象。当我们调用 fly 方法时,会根据实际的对象类型来执行相应的方法。
AI 代码解读
目录
打赏
0
1
1
0
226
分享
相关文章
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
136 2
JVM 性能调优 及 为什么要减少 Full GC
JVM 性能调优 及 为什么要减少 Full GC
214 4
图解MySQL【日志】——Undo Log
Undo Log(回滚日志)是 MySQL 中用于实现事务原子性和一致性的关键机制。在默认的自动提交模式下,MySQL 隐式开启事务,每条增删改语句都会记录到 Undo Log 中。其主要作用包括:
188 0
|
7月前
|
Eureka服务注册流程
Eureka 是一款用于服务注册与发现的工具。服务提供者启动时向 Eureka 服务器注册自身信息,定期发送心跳保持活跃状态。服务消费者通过 Eureka 获取服务列表并调用。服务下线时主动通知 Eureka 移除实例信息。
105 0
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
153 3
深度解析 | 什么是超融合数据中心网络?
深度解析 | 什么是超融合数据中心网络?
5649 1
CSS基础-CSS3过渡与动画
【6月更文挑战第11天】本文介绍了CSS3的过渡和动画特性,用于创建平滑的视觉效果。过渡通过`transition`属性实现元素样式改变的缓动效果,常用于按钮悬停、图片切换等场景。易错点包括忘记设置初始和最终样式,以及过渡效果不明显。动画则利用`@keyframes`定义关键帧序列,适用于循环播放的图标旋转等复杂效果。动画的错误可能在于结束状态处理和无限循环的性能问题。通过代码示例和避免常见陷阱,开发者能更好地利用CSS3动画提升网页交互体验。关键在于适度使用,保持界面流畅舒适。
199 2
Python3,Moviepy,一款功能强大且操作简单的视频剪辑神库。
Python3,Moviepy,一款功能强大且操作简单的视频剪辑神库。
592 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等