继承和多态的一点小小研究

       今天在工作时,调用工厂类中的一个方法,该方法返回的是实现一个接口的对象,然后调用该对象的的方法(这个方法接口并没有)时,竟然发现无法调用,一时感到奇怪,不知为何?

         回来想了想,查了查资料才知道,原因如下:

Java引用变量有两个类型:编译时类型运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。

         这个在编译时,创建的接口类引用已经被确定,即它所能使用的属性,方法都已经固定,只有这个接口提供的属性和方法才能被访问。而在运行时动态的返回的接口实现类对象,无法访问他的扩展方法和扩展属性

public class JavaSETest {
	
	@Test
	public void testExtends() {
		RootClass root = new Child();
		root.test1();//这是对Test1的方法重写!
//		root.test2();//出现错误,无法获取
		Child child = (Child)root;//转型后就可以访问了
		child.test2();//i am here!
		
		RootInterface rootInterface = new Child();
		rootInterface.test1();//这是对Test1的方法重写!
		//rootInterface.test2();报错
		Child child2 = (Child)rootInterface;//向下转型即可获取
		child2.test2();//i am here!
	}

}


class RootClass {
	public void test1() {
		System.out.println("where are you!");
	}
}

class Child  extends RootClass implements RootInterface{
	public void test2() {
		System.out.println("i am here!");
	}
	public void test1() {
		System.out.println("这是对Test1的方法重写!");
	}
}
interface RootInterface {
	public void test1();
}
千里之堤毁于蚁穴,还是希望自己能掌握好基础,做一名优秀的程序员。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值