Java学习总结——8.2 面向对象的特征三:多态性

1.多态性指的是什么?多态性可以理解为一个事物的多种表现形态。

   1)方法的重载与重写

   2)子类对象的多态性

2.子类对象的多态性使用的前提:①要有类的继承 ②要有子类对父类方法的重写。

3.程序运行分为编译状态和运行状态。

   对于多态性来说,编译时,"看左边",将此引用变量理解为父类的类型。

   运行时,"看右边",关注于真正对象的实体:子类的对象。那么执行的方法就是子类重写的。

4.子类对象的多态性,并不使用于属性。

范例:

//子类对象的多态性:父类的引用指向子类对象。

Person p1 = new Man(); //向上转型

//虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法

p1.eat(); //在子类中重写了此方法

一、案例:向上转型

1.Person.java(父类)

package me.gorden.java;

public class Person {
	
	public void eat(){
		System.out.println("Person类的eat()方法");
	}
	
	public void walk(){
		System.out.println("Person类的walk()方法");
	}
	
}

2.Man.java(子类)

package me.gorden.java;

public class Man extends Person{
	
	@Override
	public void eat() {
		System.out.println("Man类的eat()方法");
	}
	
	@Override
	public void walk() {
		System.out.println("Man类的walk()方法");
	}
}

3.JavaTest.java测试类

package me.gorden.java;

import org.junit.Test;

public class JavaTest {
	
	@Test
	public void demo1(){
		
		Person person = new Man();
		person.eat();
		
	}
	
	
}
 
 

结果:调用了子类重写的方法



二、案例:向下转型

//子类对象的多态性:父类的引用指向子类对象。

Person p1 = new Man(); //向上转型

//虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法。

p1.eat(); //在子类中重写了此方法

p1.walk(); //在子类中重写了此方法

//使用强转符:()

Man m = (Man)p1; //向下转型


其他类都和上面的一样,只有测试类不一样

1、JavaTest.java(测试类)

package me.gorden.java;

import org.junit.Test;

public class JavaTest {
	
	@Test
	public void demo1(){
		
		Person person = new Man();
		person.eat();
		
		Man man = (Man) person;
		man.eat();
		
		
	}
	
	
}

结果:



猜你喜欢

转载自blog.csdn.net/qq_36501591/article/details/80716209