java基础-面向对象の多态

多态性指的是:一个事物的多种表性形态

方法的重载与重写也是一种表现

子类对象的多态性

 

前提:

类的继承

子类对父类方法的重写

程序运行时分为编译、运行

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

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

 

 

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

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

P1.walk();

P1.walk();

Woman w =(Woman)p2;向下转型,使用强转符:()

注意:如果man转化成woman在运行的时候会报类型转化异常错,java.lang.ClassCastException

//instanceof

If (p1 instanceof Woman){

Woman w1=(Woman)p1;

W1.shopping();

}

If (p1 instanceof Man){

Man m1=(Man)p1;

m1.entertainment();

}

格式:对象a instanceof A:判断对象a是否是A的一个实例,是的话返回true;否则返回false

aA的实例,那么a也一定是A类的父类的实例

父类的引用指向子类对象

package newpackage;
//多态
import java.util.concurrent.atomic.AtomicLong;

import javax.management.InstanceAlreadyExistsException;

public class TestAnimal {
public static void main(String[] args) {
TestAnimal t=new TestAnimal();

//func的参数可以是任意的animal()父类或者旗下子类
//父类对象指向子类引用
t.func(new Animal());
t.func(new Cat());
t.func(new Dog());

}

public void func(Animal a) {
	a.eat();
	a.jump();
	//进行多态的判断
	if(a instanceof Dog){
		((Dog) a).wangwang();
	}else if(a instanceof Cat) {
		((Cat) a).catchMouse();
	}
}
}
	
	

class Animal{
	String name;
	int age;
	public void eat(){
		System.out.println("animals eat");
	}
	public void jump(){
		System.out.println("animalsjump");
	}
}
class Dog extends Animal{
	public void eat() {
		System.out.println("Dogs eat");
	}
	public void jump() {
		System.out.println("Dogs jump");
	}
	public void wangwang(){
		System.out.println("Dogs wangwang");
	}
}
class Cat extends Animal{
	public void eat() {
		System.out.println("Cats eat");
	}
	public void jump() {
		System.out.println("Cats jump");
	}
	public void catchMouse(){
		System.out.println("Cats catch mouses");
	}
}

你可能感兴趣的:(java基础,面向对象,多态)