当前位置: 首页 > news >正文

多态 使用场景

多态允许不同类的对象对同一消息做出不同的响应。在 Java 中,多态主要通过继承和接口实现。

场景一:方法参数多态

// 定义一个动物抽象类
abstract class Animal {public abstract void makeSound();
}// 定义猫类,继承自动物类
class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("喵喵喵");}
}// 定义狗类,继承自动物类
class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("汪汪汪");}
}// 定义一个动物操作类
class AnimalOperator {public void operate(Animal animal) {animal.makeSound();}
}public class PolymorphismExample {public static void main(String[] args) {AnimalOperator operator = new AnimalOperator();Cat cat = new Cat();Dog dog = new Dog();operator.operate(cat); // 传入猫对象operator.operate(dog); // 传入狗对象}
}

场景二:返回值多态

// 定义一个形状抽象类
abstract class Shape {public abstract double area();
}// 定义圆形类,继承自形状类
class Circle extends Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double area() {return Math.PI * radius * radius;}
}// 定义矩形类,继承自形状类
class Rectangle extends Shape {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}@Overridepublic double area() {return width * height;}
}// 定义一个形状工厂类
class ShapeFactory {public Shape createShape(int type) {if (type == 1) {return new Circle(5);} else {return new Rectangle(4, 6);}}
}public class ReturnPolymorphismExample {public static void main(String[] args) {ShapeFactory factory = new ShapeFactory();Shape shape1 = factory.createShape(1);Shape shape2 = factory.createShape(2);System.out.println("Shape 1 area: " + shape1.area());System.out.println("Shape 2 area: " + shape2.area());}
}

向上转型和向下转型示例

// 定义一个父类
class Parent {public void print() {System.out.println("This is Parent class");}
}// 定义一个子类
class Child extends Parent {@Overridepublic void print() {System.out.println("This is Child class");}public void childMethod() {System.out.println("This is a child-specific method");}
}public class TypeCastingExample {public static void main(String[] args) {// 向上转型Parent parent = new Child(); // 子类对象赋值给父类引用parent.print(); // 调用子类重写的方法// 向下转型if (parent instanceof Child) {Child child = (Child) parent; // 父类引用转换为子类引用child.print();child.childMethod(); // 调用子类特有的方法}}
}

instanceof 关键字使用示例

instanceof 关键字用于检查一个对象是否是某个类或接口的实例。

// 定义一个接口
interface Flyable {void fly();
}// 定义一个鸟类,实现 Flyable 接口
class Bird implements Flyable {@Overridepublic void fly() {System.out.println("Bird is flying");}
}// 定义一个飞机类,实现 Flyable 接口
class Plane implements Flyable {@Overridepublic void fly() {System.out.println("Plane is flying");}
}public class InstanceOfExample {public static void main(String[] args) {Flyable bird = new Bird();Flyable plane = new Plane();System.out.println(bird instanceof Bird); // 输出 trueSystem.out.println(bird instanceof Flyable); // 输出 trueSystem.out.println(plane instanceof Bird); // 输出 false}
}

http://www.lryc.cn/news/585507.html

相关文章:

  • 【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南
  • VOB如何转换成MP4格式?3种快速转换教程推荐
  • GT IP核仿真测试
  • Kubernetes 高级调度特性
  • 基于kafka的分布式日志收集与实时监控平台(原理,框架)
  • Spring MVC中异常处理
  • unity VR linerenderer的线会被UI盖住
  • 博客系统开发全流程解析(前端+后端+数据库)与 AI 协作初体验
  • [electron]升级功能
  • Android 12系统源码_分屏模式(一)从最近任务触发分屏模式
  • 有限状态机FSM(Finite State Machine)自动初始化
  • 提升你的AI交互技能:使用Anthropic互动提示教程
  • 2025年亚太中文赛B题第一版本超详细解题思路
  • CMU15445-2024fall-project1踩坑经历
  • 学弟让我帮忙写一个学生管理系统的后端,我直接上科技
  • 【八股消消乐】浅尝Kafka性能优化
  • IAR携手矽力杰与普华基础软件,共推RISC-V车规芯片高安全应用落地
  • 必备软件推荐:1、Everything:Windows 文件查找的终极利器
  • PyInstaller打包完整指南1
  • 【web应用】若依框架前端报表制作与导出全攻略(ECharts + html2canvas + jsPDF)
  • 8-day06预训练模型
  • CReFT-CAD 笔记 带标注工程图dxf,png数据集
  • 上位机知识篇---常见的文件系统
  • 灰盒级SOA测试工具Parasoft SOAtest重新定义端到端测试
  • QT控件 使用QtServer系统服务实现搭建Aria2下载后台服务,并使用Http请求访问Json-RPC接口调用下载退出
  • 《月亮与六便士》:天才的背叛与凡人救赎的残酷辩证法
  • 【时时三省】(C语言基础)通过指针引用数组元素
  • 计算机网络第三章(6)——数据链路层《网桥交换机》
  • 【中文核心期刊推荐】中国农业科技导报
  • 2025最新版Docker讲解/面试/命令/容器化技术