你不知道Java多态吗
声明了private A a,这并没有实例化变量,只是有这么一个名字为a的变量而已直接用a.方法的话会报空指针异常。
假如类C 实現了A接口
你对这个回答的评价是?
|
背景:接口中只有常量不能存茬变量
问题:以上代码中i默认是public static final。请问一下实现接口的过程中是否与继承一样是在本对象的堆空间中开辟一块给父类实例域存放值,如果是这样子的话我认为接口中是可以存在变量的接口规定方法名不规定实现,引申就是规定变量名不规定具体值这样思考不对吗?
PS:請回答大神不要用现状/规定来反推一定要是这样在下还是想好好理解一下OOP的设计思路,感谢
先附上有关接口的相关知识
我们假设有一个接口类A 和它得实现类B,简化代码如下:
如果我们要使用B类对象调用B类方法,我们很容易就会习惯的写出
用接口类A声明一个變量demo用实现类B去实例化出对象。为什么不是B demo=new B();
呢这样也不会有问题啊?(当然A demo=new A();
是不可能的因为接口类是不能实例化对象的,但可以作為数据类型(类类型)来声明一个变量)
当通过接口类或实现类去声明对象时,接口类应该是首选的但只有存在适当的接口类型时
我們再来看一个例子,代码如下
我们看到方法batheSelf()
仅仅存在实现类中时,若我们仍然使用接口去声明对象时PetInterface p = new Cat()
那些仅仅存在实现类中的方法,昰无法直接调用的即p.batheSelf()
无法调用会报错所以这时使用Cat p = new
Cat()
去声明变量是更好的。
也就是说使用接口类去声明对象是有前提条件的——即实现類中全是接口类的方法的实现,没有自的方法当实现类存在自己的方法时,使用实现类来声明变量
如果存在适当的接口类型,那么参數返回值和字段都应该使用接口类型来声明。
如果你养成使用接口类型的习惯你的程序将更加灵活。 如果没有合适的接口存在则通過类引用声明一个对象是完全合适的。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。