多态--总结及举例

翻看了一些资料,对java中多态基本要点做一下总结,水平有限,欢迎指正!

------------------------------------------------------------------------------------------------------------------------------------ java引用变量的两个类型:编译时类型(由声明该变量时使用的类型决定)和运行时类型(由实际赋给该变量的对象决定)。

如果变量的编译时类型和运行时类型不同,就能出现多态。

例如:Person p = new Student();   //Person类是Student的父类;此处引用变量的编译时类型为Person,运行时类型为Student,表现出多态性。

把一个子类对象直接赋给父类引用变量时,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征。

如下代码所示,分为三种情况:(1)子类继承自父类的方法被调用;(2)子类重写的父类的方法被调用;(3)子类自定义的方法被调用。

<span style="font-size:14px;">public class Person{
	public String name="人类";
	public void eat(){
		System.out.println("吃吃吃");
	}
	public void study(){
		System.out.println("学习常识");
	}
}</span>

public class Student extends Person{
	public String name="学生";
	
	public void study(){
		System.out.println("学习奥数");
	}
	
	public void exam(){
		System.out.println("参加高考");
	}
	
	public static void main(String[] args) {
		//编译时类型与运行时类型都为父类Person
		Person p = new Person();   
		System.out.println(p.name);   //人类
		p.eat();                      //吃吃吃
		p.study();                    //学习常识
		
		//编译时类型与运行时类型都为子类Student
		Student s = new Student();
		System.out.println(s.name);    //学生
		s.eat();                       //吃吃吃
		s.study();                     //学习奥数
		s.exam();                      //参加高考
		
		//编译时类型为Person,运行时类型为Student
		Person ps = new Student();
		System.out.println(ps.name);    //人类
		ps.eat();                       //吃吃吃
		ps.study();                     //学习奥数
		//ps.exam();   
		//报错:the method exam() is undefined for  the type Person
		Student stu = (Student)ps;      //强制类型转换
		stu.exam(); 					//参加高考
	}
}<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);"> </span>

注意其中ps.name输出的依旧是“人类”,对象的实例变量不具备多态性,因此不是输出“学生”。

总结:java引用变量只能调用编译时类型的方法,不能调用运行时类型的方法,如果需要调用运行时类型方法,需要使用(type)进行强制类型转换,通常在此之前用instanceOf()进行类型检查。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值