欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第13章 多态

程序员文章站 2022-07-12 18:52:17
...

一、运算符instanceof的用法

public class Student1 extends Person1 {
	public static void main(String[] args) {
		Student1 s = new Student1();
		Person1 p = new Person1();
		// instanceof判断的是左侧对象跟右侧类型是否一致,或者是,右侧
		//类型是左侧对象的父类
		System.out.println(s instanceof Student1);
		System.out.println(s instanceof Person1);
		System.out.println(p instanceof Student1);
		System.out.println(p instanceof Person1);
	}
}
class Person1{
	
}

二、对象的类型转换

/*
 * 数据类型转换分为两种,一种是自动类型转换,一种是强制类型转换
 * 
 * 对象类型也存在类型转换,称为对象转换
 * 对象转换分为两种,一种是向上类型转换,一种是向下类型转换
 * 向上类型转换:子类对象给父类赋值-->自动转换
 * 向下类型转换:父类对象给子类赋值-->强制转换
 * 
 * 向上转换的实质是父类引用最终指向的是子类中那个小的父类对象
 *向下转换的注意事项是:必须要经过向上类型转换才能进行向下类型转换,否则
 *编译报错。
 */


public class Student2 extends Person2 {
	public static void main(String[] args) {
		// 向上类型转换,子类对象给父类赋值
		// 父类类型的引用变量指向子类对象
		// 自动转换
		// 实质是,父类的引用变量指向的是子类对象中的那个小的父类对象
		Person2 p1 = new Student2();
		Student2 s = new Student2();
		Person2 p = s;
		
		// 向下类型转换,父类给子类赋值
		// 子类的引用变量指向父类对象
		// 强制类型转换
		// 要保证父类对象在子类对象之中,才能进行向下类型转换
		Person2 p2 = new Student2();
		Student2 s1 = (Student2) p2;
		
		
//		Student2 s1 = (Student2) new Person2();
//		Person2 p2 = new Person2();
//		Student2 s2 = (Student2) p2;
		
	}
}
class Person2{
	
}

三、多态性

/*
 * 多态:同样的消息被不同类型的对象接收,产生不同的结果,就是多态
 * 条件:要有继承、重写、向上类型转换
 * 三个条件才能发生多态
 */
public class TestDemo {
	public static void main(String[] args) {
		Animal a = new Animal();
		Animal dog = new Dog();
		Animal cat = new Cat();
		a.cry();
		dog.cry();
		cat.cry();
		
	}
}
class Animal{
	public void cry() {
		System.out.println("动物叫声");
	}
}
class Dog extends Animal{
	@Override
	public void cry() {
		System.out.println("汪汪");
	}
}
class Cat extends Animal{
	@Override
	public void cry() {
		System.out.println("喵喵");
	}
}