面向对象特征之三:多态性
1.理解多态性:可以理解为一个事物的多种形态
- 2.何为多态性:
- 对象的多态性:父类引用指向子类对象(或子类的对象赋给父类引用)
- 3.多态的使用:虚拟方法调用
- 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
- 总结:编译:看左边;运行;看右边。
- 4.多态性的使用前提:1.类的继承关系 2.方法的重写
- 5.对象的多态性,只适用于方法,而不适用于属性(编译和运行都看左边)
在B站学习java写的代码
代码如下
/* * 面向对象特征之三:多态性 * * 1.理解多态性:可以理解为一个事物的多种形态 * 2.何为多态性: * 对象的多态性:父类引用指向子类对象(或子类的对象赋给父类引用) * * 3.多态的使用:虚拟方法调用 * 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。 * 总结:编译:看左边;运行;看右边。 * * 4.多态性的使用前提:1.类的继承关系 2.方法的重写 * * 5.对象的多态性,只适用于方法,而不适用于属性(编译和运行都看左边) * */
PersonTest类
package com.day0125_2; public class PersonTest { public static void main(String[] args) { Person p1=new Person(); p1.eat(); Man man =new Man(); man.eat(); man.age=25; man.earnMoney(); System.out.println("************"); //******************************************** //对象的多态性:父类引用指向子类对象 Person p2=new Man(); // Person p3=new Woman(); //多态的使用:当调用子父类同名同参的方法时,实际执行的是子类重写父类的方法——虚拟方法调用 //编译在父类,执行在子类 p2.eat(); p2.walk(); // p2.earnMoney();//The method earnMoney() is undefined for the type Person System.out.println(p2.id);//1001 } }
Person类
package com.day0125_2; public class Person { String name; int age; int id=1001; public void eat() { System.out.println("人:吃饭"); } public void walk() { System.out.println("人:走路"); } }
Man类
package com.day0125_2; public class Man extends Person{ boolean isSmoking; int id=1002; public void earnMoney() { System.out.println("男人负责挣钱养家"); } public void eat() { System.out.println("男人多吃肉,长肌肉"); } public void walk() { System.out.println("男人霸气的走路"); } }
Woman类
package com.day0125_2; public class Woman extends Person{ boolean isBeauty; public void goshopping() { System.out.println("女人喜欢购物"); } public void eat() { System.out.println("女人少吃,为了减肥"); } public void walk() { System.out.println("女人窈窕的走路"); } }