Java知识点–动态绑定机制及其练习题

导读:本篇文章讲解 Java知识点–动态绑定机制及其练习题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

动态绑定机制两条秘诀

1.当调用对象方法时,该方法会与该对象的运行类型绑定
2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里调用
注意:动态绑定机制是建立在多态的基础上的。

练习题

求输出什么?

public class DynamicBinding { 
	public static void main(String[] args) { 
		//a 的编译类型 A, 运行类型 B 
		A a = new B();//向上转型 
		System.out.println(a.sum());
		System.out.println(a.sum1());
	} 
}
class A {//父类 
	public int i = 10; //动态绑定机制: 
	public int sum() {//父类 sum() 
		return getI() + 10;
	}
	public int sum1() {//父类 sum1() 
		return i + 10;
	}
	public int getI() {//父类 getI 
		return i; 
	} 
}
class B extends A {//子类 public 
	int i = 20; // 
	//public int sum() {//子类 sum()
	//	return i + 20;  
	//}
	public int getI() {//子类 getI() 
		return i; 
	}  
	//public int sum1() {//子类 sum1()
	//	return i + 10;  
	//} 
}

解题思路:

1.A a = new B();是多态的向上转型,a 的编译类型是A, 运行类型是B。
2.输出a.sum(),由于a 的编译类型是A,所以A类的所有成员都可以访问,当然如果B类重写了A类的方法,这些被重写的方法也可以被访问
3.在运行时,以a的运行类型为准,所以a.sum()首先会在B类中寻找sum方法,因为属性没有动态绑定机制,所以 i = 20,a.sum() = 40。
4.a.sum1()同理,输出30。

如果子类 sum(),子类 sum1()被注销,又会输出什么?
1.当a.sum()在B类找不到sum方法时,就会找A类的sum方法,但是sum方法中还有getI()方法,这时就会用到第一条秘决:当调用对象方法时,该方法会与该对象的运行类型绑定。所以就会返回B类查找getI()方法,因为属性没有动态绑定机制,所以 i = 20,getI() = 20,a.sum() = 30。
2.a.sum1()也会在A类寻找sum1方法,因为属性没有动态绑定机制,所以 i = 10,a.sum1() = 20。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/120188.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!