oop---多态

多态性,时面向对象中最重要的概念,在java种体现

  1. 方法的重载(overload)和重写(overwrite)
  2. 对象的多态--- 可以直接应用在抽象类和接口上

java 引用变量有两个类型:编译时类型和运行时类型。

编译时类型由声明该变量时使用的类型决定,

运行时类型由实际赋给该变量的对象决定。

如编译时类型和运行时类性不一致,就会出现多态(Polymorphism)



/*测试类:
 * 面向对象特征三:三多态性
 * 
 * 1.多态性指什么?多态性,可以理解为一个事物的多种表现
 * 		1)方法的重载与重写
 * 		2)子类对象的多态(只适应于方法)
 * 2.子类对象多态使用前提:要有类的继承 子类重写父类的方法
 * 
 * 3.成员运行分为编译状态和运行状态
 * 		对于多态性来说,编译时:"看左边",将此引用变量解释为父类的类型
 * 		运行时,“看右边”专注于真正对象的实体,子类的对象
 * 
 * 4.子类属性的多态性并不适用于多态性
 * 
 */
public class TestPerson {

	public static void main(String[] args) {
		Person p = new Person(); //父类属性id
		p.eat();
		p.walk();
		
		man m = new man(); //子类属性id
		m.eat();
		m.walk();
		
		
		//子类对象的多态:父类的引用指向子类对象 ,(子类对象指向父类引用)
		
		Person p1 = new man(); //向上转型
		//虚拟方法的调用,通过父类的引用指向子类实体,调用方法时,实际执行的是子类重写父类的方法
		p1.eat();
		p1.walk();
		System.out.println("子父类属判断性的显示:"+p1.id); //打印出来的是父类属性id
		
		man m1 = (man)p1; //向下转型
	//	p1.entainment();
		m1.entertainment();
		
		//instanceof
	
		if(p1 instanceof man)
		{
			man m11 = (man)p1;
			m11.entertainment();
		}
	}
	
	public void show (Person p) {
		Person p1  =  new man();
	}
	
}

public class TestDemo {
	
	public static void main(String[] args) {
		TestDemo t = new TestDemo();
		t.func(new Animal());
		t.func(new Dog());
		t.func(new Cat());  //打印的是各自对象的方法
	}
	
	public void func (Animal a) { // Animal a = new Dog()/Cat();
		a.eat();
		a.jump();
	}

}
class Animal{
	String name;
	int age;
	public void eat() {
		System.out.println("进食");
	}
	
	public void jump() {
		System.out.println("跳");
	}
}

class Dog extends Animal {
	public void eat() {
		System.out.println("

猜你喜欢

转载自blog.csdn.net/qq_35361859/article/details/80887044
OOP
今日推荐