多态
1.理解多态性:可以理解为一个事物的多种形态。
2.何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
3.多态的使用:虚拟方法调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
★总结:编译,看左边;运行,看右边。Person person = new Man( );
“看左边”:看的是父类的引用(父类中不具备子类特有的方法);
“看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)。
4.多态性的使用前提:
①类的继承关系;②有方法的重写。
5.对象的多态性,只适用于方法,不适用于属性。
下面通过程序演示多态性的思想,其核心思想就是上面提到的(★总结)部分:
package com.java.oop3;
/**
* @ClassName Person
* @Description: 人类
* @Author Seven
* @Date 2021/7/30 9:54
* @Version 1.0
**/
public class Person {
int age;
int weight;
public void run(){
System.out.println("跑步");
}
public void eat(){
System.out.println("吃饭");
}
public void isSmoking(){
System.out.println("抽烟");
}
}
package com.java.oop3;
/**
* @ClassName Man
* @Description: 男人类
* @Author Seven
* @Date 2021/7/30 9:54
* @Version 1.0
**/
public class Man extends Person{
@Override
public void eat() {
System.out.println("男人吃得多");
}
@Override
public void run() {
System.out.println("男人跑得更快");
}
@Override
public void isSmoking() {
System.out.println("男人抽烟的多");
}
}
package com.java.oop3;
/**
* @ClassName Woman
* @Description: 女人类
* @Author Seven
* @Date 2021/7/30 9:54
* @Version 1.0
**/
public class Woman extends Person{
@Override
public void run() {
System.out.println("女人跑得慢一点");
}
@Override
public void eat() {
System.out.println("女人吃得少");
}
@Override
public void isSmoking() {
System.out.println("女人抽烟的少");
}
}
package com.java.oop3;
/**
* @ClassName PersonTest
* @Description: 测试类(多态的使用)
* @Author Seven
* @Date 2021/7/30 9:54
* @Version 1.0
**/
public class PersonTest {
public static void main(String[] args) {
PersonTest test = new PersonTest();
test.function(new Man()); //多态的作用,提高了代码的通用性。
test.function(new Woman());
}
public void function(Person person){
person.eat();
person.run();
person.isSmoking();
}
}