abstract class Animal {
public abstract void eat();
public abstract void play();
}
class Dog extends Animal {
public void eat() {
System.out.println("狗吃骨头");
}
public void play() {
System.out.println("狗玩飞盘");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
public void play() {
System.out.println("猫玩毛线");
}
}
class Demo1 {
public static void main(String[] args) {
Animal a = new Dog();
a.eat();
a.play();
a = new Cat();
a.eat();
a.play();
}
}
多态:
a.eat(); a.play();,main方法中出现了重复的代码,打印的结果不同,相同代码,不同的表现形式就是多态。
看到这里大家一定会感觉,之前有时候也会这样写,也没感觉它有多大作用,那么就看下一段代码:
abstract class Animal {
public abstract void eat();
public abstract void play();
}
class Dog extends Animal {
public void eat() {
System.out.println("狗吃骨头");
}
public void play() {
System.out.println("狗玩飞盘");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
public void play() {
System.out.println("猫玩毛线");
}
}
class Animalrun {
public static void run(Animal a) {
a.eat();
a.play();
}
}
class Demo1 {
public static void main(String[] args) {
Animalrun.run(new Dog());
Animalrun.run(new Cat());
}
}
这段代码怎么样?我创建了一个类,专门为完成所有对象都要完成的东西,用一个static,用类名直接访问该方法,之前,你要完成一件事,你创建一次对象调用一次方法,当对象多到一定程度的时候,你会不会不淡定了,这就是多态的好处。
多态:
首先回忆一下面向对象的三大特性,封装,继承,多态。
多态的前提是继承或者实现,还有就是父类的引用指向子类对象,也就是下面我们提到的向上转型。多态就是一个行为的多种形态。