昨天听的是面向对象中的[继承],对于高级语言来说,具备封装性,继承性,多态性是最基本的,我之前用的C#也是具备这样的特点,只是知道。在工作中公司的做法让我把C#当C用了{:3_60:},哪里还有什么面向对象的东西在里面,实在是惭愧{:3_52:},昨天听了毕老师的总结还是有重新认识的{:3_53:}。
谁都知道,继承性就是子类可以继承到父类的一些成员,子类就可以不用重复定义了,可以提高复用性,而且一般子类和父类都有一定的逻辑关系的。
毕老师说了将多个类共性的内容单独提取出来做成父类,其他的类都从父类继承(但也需根据逻辑关系提取)
继承的存在提高了代码的复用性
让类和类之间产生了关系,这样才有了后面的多态的特性(好深奥{:3_62:})
1)java中的继承的关键字是extends而不同于C#中:,- 如class Student extends Person {}
复制代码
2)在Java中只支持单继承,而不能多继承,主要原因是对继承存在安全隐患,当继承的多个父类都有相同的方法时,JVM无法识别那个才是要继承的
值得注意的一点就是:不要为了继承而继承,继承的类之间必须要有逻辑关系
3)java中类似于多继承的机制是对实现(表示不知到是什么,后面会讲吧)
4)java还是支持多层继承的
继承的出现使得类就变得很复杂了,他们就成了一个体系,使用这个体系的话,首先需要查看父类们的功能,以便了解整个体系的基本功能,而使用时则是创建子类对象使用期所有的功能{:3_56:}
使用过程中为了区分父类和本类,出现了super,this关键字,
super表示超类或者父类,这样若果在子类和父类同时定义了相同的变量就可以使用它们作出区分
另外,如果子类和父类的成员函数是一样的时候子类实例调用方法时JVM则只会执行子类的方法,这样的特性在java中叫做覆盖或者重写。实际上父类的方法还是可以用,只是看起来只是用到了子类的方法
java中出了继承这样的类与类的关系外还有聚集关系,聚合+组合(类与类关系紧密不可分割)这点我还是不知道到底有什么用{:3_62:}。
说面向对象和面向过程语言的区别是封装,继承,多态,其实个人感觉最终还是继承性的区别最大,因为面向过程语言中的struct结构体也可以实现封装,最重要的区别确实我可以对不同的封装进行继承,还可以加上自己的方法和属性,多态还没讲到,这里就不评论了
这里我有个疑问{:3_62:}:说子类和父类同时定义了相同的方法时,子类会覆盖,如果我用子类实例使用super关键字来调用此方法会调用到父类吗
|
|