1、理解多态性:可以理解为一个事物的多种形态
2、何为多态性:
对象的多态性:父类引用指向子类对象
3、多态的使用,虚拟方法调用有了对象的多态以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
总结:编译看左边,运行看右边
Person类
package com.atguigu.java4;
public class Person {
String name;
int age;
public void eat() {
System.out.println("人吃饭!");
}
public void walk() {
System.out.println("人走路!");
}
}
Man类
package com.atguigu.java4;
public class Man extends Person{
boolean isSmoking;
@Override
public void eat() {
System.out.println("男人吃饭!");
}
@Override
public void walk() {
System.out.println("男人走路!");
}
public void earnMoney() {
System.out.println("男人挣钱养家!");
}
}
Woman类
package com.atguigu.java4;
public class Woman extends Person{
boolean isBeauty;
@Override
public void eat() {
System.out.println("女人少吃,减肥!");
}
@Override
public void walk() {
System.out.println("女人窈窕的走路!");
}
public void goShopping() {
System.out.println("女人喜欢购物!");
}
}
测试类
package com.atguigu.java4;
/*
* 面向对象的特征之三:多态性
*
* 1、理解多态性:可以理解为一个事物的多种形态
* 2、何为多态性:
* 对象的多态性:父类引用指向子类对象
* 3、多态的使用,虚拟方法调用
* 有了对象的多态以后,我们在编译期,只能调用父类中声明的
* 方法,但在运行期,我们实际执行的是子类重写父类的方法
* 总结:编译看左边,运行看右边
*
*
*/
public class PersonTest {
public static void main(String[] args) {
//对象的多态性:父类引用指向子类对象
Person p1 = new Man();
//多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法---虚拟方法调用
p1.eat();//执行的是子类重写的eat()方法
p1.walk();
}
}
调试结果