猿问

今天在研究继承和复用/合成有一点没有理解:

a.继承复用破坏包装,因为继承将超类的实现细节暴露给子类。由于超类的内部细节常常是对于子类透明的,所以这种复用是透明的复用,又称“白箱”复用。 
b.如果超类发生改变,那么子类的实现也不得不发生改变。 
c.从超类继承而来的实现是静态的,不可能在运行时间内发生改变,没有足够的灵活性。 
其中a.继承将超类的实现细节暴露给子类; 
对于父类来说,暴露给子类的只能是pretected权限(如果在一个包中,还有package),而对于一个类来说,实现细节应该被控制为private;实在不明白暴露实现细节怎么理解?? 
第二.对于c从超类继承而来的实现是静态的,不可能在运行时间内发生改变,没有足够的灵活性。 这里的静态怎么理解,不能改变又怎么理解?????? 
请哪位慕友点拨一下哈,万分感谢!!

牧羊人nacy
浏览 79回答 2
2回答

catspeake

1,父类的实现细节不是要暴露给子类,而是基本上规定了这个方法在什么时候适用,并且给子类修改的机会。 2,继承用法我觉得有两种,一是子类方便利索的得到父类的特性和方法,而是重构;假如是一的话,大可不比纠结暴露不暴露的问题,因为我们本身就是想得到父类的一切,减少重复代码,假如是二的话,一般来说会用父类的对象指向子类引用,那么在操作过程中,肯定是父类的对象来调用方法,也就是说,你子类暴露的方法基本上得和父类一样,因为你和父类不同的方法基本上没机会调用,顶多是类里面的方法自己调用而已, 那么这样就体现了灵活性,有的书叫做后绑定。从超类继承而来的实现是静态的就表示你在语言一级的特性上再怎么变换,编译好的class和方法基本上不会变的,除非你用字节码改变。

千万里不及你

static 静态类,程序已启动就加载,不能被继承。
随时随地看视频慕课网APP

相关分类

Java
我要回答