4.4 多态性

编程入门 行业动态 更新时间:2024-10-27 20:29:58

4.4 <a href=https://www.elefans.com/category/jswz/34/1764710.html style=多态性"/>

4.4 多态性

1. 多态概述

多态是面向对象思想中的一个非常重要的概念,在Java中,多态是指不同类的对象在调用同一个方法时表现出的多种不同行为。

例如,要实现一个动物叫声的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传入犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果不同的现象就是多态。

2. 多态类型

Java中多态主要有以下两种形式:

  • 静态的多态,通过方法的重载实现。
  • 动态的多态,又称对象的多态,通过方法的重写实现。

2.1 动态多态的前提

  • 继承,在多态中必须存在有继承关系的子类和父类。

  • 重写,子类对父类的方法进行重写。

  • 父类引用指向子类对象。

2.2 多态的好处与弊端

  • 好处,提高了程序的扩展性,定义方法使用父类型作为参数,在使用时用具体的子类型参与操作。
  • 弊端,不能使用子类的特有功能。

2.3 多态形式

具体类多态、抽象类多态和接口多态。

3. 具体类的多态案例

  • 案例需求

定义动物类Animal,定义其方法eat(),方法用public修饰。

定义一个小狗类Dog,继承Animal类,在Dog类中覆盖Animal类中的方法eat(),输出“小狗爱吃骨头”。

定义一个小猫类Cat,继承Animal类,在Cat类中覆盖Animal类中的方法eat(),输出“小猫爱吃鱼”。

编写测试类,分别测试父类引用指向子类Dog和Cat对象,访问eat()方法。

  • Animal类

public class Animal {public void eat(){System.out.println("动物吃饭");}
}
  • Dog类

public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃骨头");}
}
  • Cat类

public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼");}
}
  • 测试类

public class TestAnimal {@Testpublic void test1(){//创建父类对象Animal animal = new Animal();animal.eat();}@Testpublic void test2(){//父类引用指向子类对象 测试DogAnimal animal = new Dog();animal.eat();}@Testpublic void test3(){//父类引用指向子类对象 测试CatAnimal animal = new Cat();animal.eat();}
}

4. 抽象类的多态案例

案例需求

定义抽象类Shape,定义其抽象方法getArea(),方法用public修饰。

定义一个圆类Circle,继承Shape类,在Circle类中覆盖Shape类中的抽象方法getArea(),计算圆的面积。

定义一个正方形类Square,继承Shape类,在Square类中覆盖Shape类中的抽象方法getArea(),计算正方形的面积。

编写测试类,基于抽象类的多态,计算所有图形的面积和。

  • Shape抽象类

public abstract class Shape {public abstract double getArea();}
  • Circle类

public class Circle extends Shape{private double r;public Circle(double r){this.r = r;}@Overridepublic double getArea() {return Math.PI * r * r;}
}
  • Square类

public class Square extends Shape{private double r;public Square(double r){this.r = r;}@Overridepublic double getArea() {return r * r;}
}
  • 测试类

public class TestArea {/*** 求所有图形的面积和*/@Testpublic void test(){Shape[] shapes = new Shape[2];shapes[0] = new Circle(1);shapes[1] = new Square(2);double sum = 0;for(Shape shape : shapes){sum += shape.getArea();}System.out.println("所有图形的面积和为:" + sum);}}

5. instanceof关键字

Java中可以使用instanceof关键字判断一个对象是否是某个类(或接口)的实例,语法格式如下所示。

对象  instanceof  类(或接口)

上述语法格式中,如果“对象”是指定的类的实例对象,则返回true,否则返回false。

更多推荐

4.4 多态性

本文发布于:2023-12-06 00:15:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1665846.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多态性

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!