多态的概念:
通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
实现多态的两个必要条件:
1.向上转型
简单来讲,向上转型就是用父类的引用调用子类引用的对象,从而实现向上转型。
例如:我们定义了一个父类Animal类,有子类Dog继承Animal类
Animal animal = new Dog();
用代码实现向上转型。
向上转型有几种方式:
(1)、直接赋值
Animal animal = new Dog();
(2)、作为参数
public static void func(Animal animal) {
}
(3)、返回值
public static Animal func() {
}
2.方法重写与方法重载的区别
方法重写和方法重载都具有多态,方法的重载是运行时的多态,而方法的重写是运行时的多态。
(1)方法的重载是在一个类中,定义了多个方法,其中它们的方法名相同,方法的参数列表不同(个数,顺序,类型),这就称为方法的重载。
public static int add(int x,int y) {
return x+y;
}
public static int add(int x,int y,int z) {
return x+y+z;
}
(2)方法的重写是在子类与父类中的重写方法名相同,参数也完全相同,而返回值可以是具有父子类的关系。
class Animial {
public String name;
public int age;
public void eat(String name) {
System.out.println(this.name + " 在吃");
}
}
class Cat extends Animial {
public void eat(String name) {
this.name = name;
System.out.println(this.name + " 在吃猫粮");
}
}
(3)方法的重载是一个类的多态性表现,而方法的重写是父类与子类多态性的表现
3.多态的实现
abstract class Shape {
public abstract void draw();
}
class Rect extends Shape {
@Override
public void draw() {
System.out.println("画矩形");
}
}
class Round extends Shape {
@Override
public void draw() {
System.out.println("画圆");
}
}
public class test {
public static void drawMap(Shape shape) {
shape.draw();
}
public static void main(String[] args) {
drawMap(new Rect());
drawMap(new Round());
}
}
分析:
它定义了一个Shape抽象类,该类有一个抽象方法draw()。然后,代码定义了两个继承自Shape的类:Rect和Round,它们各自实现了draw()方法来画出矩形和圆形。
在test类中,有一个静态方法drawMap,它接受一个Shape类型的参数。在main方法中,分别传入了Rect和Round的实例给drawMap方法。由于Java支持多态,所以drawMap方法可以根据传入的实际对象类型来调用相应对象的draw()方法。