多态
父类的引用指向子类的对象。
package com.kai.test;
public class Person {
public void eat(){
System.out.println("人吃饭");
}
public void sleep(){
System.out.println("人吃睡觉");
}
}
package com.kai.test;
public class Man extends Person{
@Override
public void eat() {
System.out.println("男人吃很多饭");
}
}
package com.kai.test;
public class PersonTest {
public static void main(String[] args) {
Person p = new Man();
p.eat();
}
}
打印结果:男人吃很多饭
问:这么做看起来和 Man man = new Man();一样,那这么做有什么意义?
其实是不一样的,当需要调用很多子类的方法时使用多态可以减少很多代码冗余
package com.kai.test;
public class Man extends Person{
@Override
public void eat() {
System.out.println("男人吃很多饭");
}
}
package com.kai.test;
public class Woman extends Person{
@Override
public void eat() {
System.out.println("女人为了保持身材,吃饭比较少");
}
}
public class PersonTest {
public static void main(String[] args) {
eat(new Man());
eat(new Woman());
System.out.println("----------------------------");
eat(new Man());
eat(new Woman());
}
public static void eat(Person p){
p.eat();
}
public static void eat(Man m){
m.eat();
}
public static void eat(Woman w){
w.eat();
}
}
男人吃很多饭
女人为了保持身材,吃饭比较少
----------------------------
男人吃很多饭
女人为了保持身材,吃饭比较少
相比较而言要调用子类的eat()方法:
不使用多态:有多少个子类就要写多少个eat()。
使用多态:只需要写一个形参是父类对象,传入子类的eat()就可以了。