- Java有三大特点,封装、继承、多态。今天我就来说一下我对多态的见解吧。
- 生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也
是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。
3.多态有三个前提;
(1) 继承或者实现【二选一】
(2)方法的重写【意义体现:不重写,无意义】
(3) 父类引用指向子类对象【格式体现】
一、下面我们写一个抽象父类
public abstract class Animal {
public abstract void eat();
}
再写两个子类继承它
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
}
定义一个测试类
public class Test {
public static void main(String[] args) {
// 多态形式,创建对象
Animal a1 = new Cat();
// 调用的是 Cat 的 eat
a1.eat();
// 多态形式,创建对象
Animal a2 = new Dog();
// 调用的是 Dog 的 eat
a2.eat();
}
}
我们可以看出,子类继承了父类,子类重写了父类的方法。
子类在调用方法的时候使用的是子类重写后的方法。
Animal a1 = new Cat();
是多态形式的创建对象。
4.父类传递形式参数,子类进行方法的调用,更能体现出多态的扩展
性与便利。
代码如下:
定义父类:
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
}
定义子类
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
}
定义测试类:
public class Test {
public static void main(String[] args) {
// 多态形式,创建对象
Dog d = new Dog();
// 调用showCatEat
showCatEat(c);
// 调用showDogEat
Cat c = new Cat();
public abstract class Animal {
showDogEat(d);
/*
以上两个方法, 均可以被showAnimalEat(Animal a)方法所替代
而执行效果一致
*/
showAnimalEat(c);
showAnimalEat(d);
}
public static void showCatEat (Cat c){
c.eat();
}
public static void showDogEat (Dog d){
d.eat();
}
public static void showAnimalEat (Animal a){
a.eat();
}
}
多态的好处,体现在,可以使程序编写的更简单,并有良好的扩展。