继承
继承的来源
继承来源于生活
如果不用继承,代码可能出现混淆属性和行为
也可能出现代码重复,和扩展性无法提升的情况
继承的概念
定义:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(Inheritance)
已有的类称为父类,而新类称为子类。父类也可以称为基类、超类,子类也可以称为派生类
子类、派生类:
子类可以继承除了父类私有属性和行为,以及构造函数之外的其他类容
子类还可以扩展新的属性和行为,还可以重写父类的方法。
类和类的关系
has-a(组合)
is-a(继承)
实现、依赖、关联关系、部分和整体
部分和整体:组合、聚合
构造器和父类私有属性不能继承
继承需要满足is-a的结构
优点:
1.代码的可重用性
2.提升程序的扩展性
单继承 和多继承:C语言中允许多个父类(多继承),java中不允许,一个类只能有一个父类(单继承)
子类实例化
new关键字来实例化
但不是先创建父类在创建子类
是只创建一个对象,先给父类分配属性空间,再叠加子类私有属性
java中继承的实现
关键字 :extends
java中只允许单继承,不支持多继承,但不是否认杂交不好
优点:安全性高,层次结构清晰,
不好的地方:丰富性降低
后续,java中可以支持多实现
方法的重写
方法重写与方法重载的区别
方法的重写:子类中的方法与父类中的方法相同(方法名称、参数列表、返回类型)
方法的重载:一个类中的方法与另一个方法相同,参数列表不同
重写体现的是父类与子类方法之间的关系,多态的动态,要去继承下来改了
重载体现的是一个内部方法之间的关系, 多态的静态,要去继承下来没改
遵循原则
子类的方法的返回值的类型、方法名和形式参数列表,必须和父类中的是相同的。
访问修饰符必须不小于父类中的访问修饰符。
子类中重写的异常不能抛出比父类更多的异常
如果两边的数据类型是基础类型,那么直接比较值是否相等
如果两边的数据类型是引用类型,那么直接比较引用 是否相等
extends():
默认情况下,调用的是Object.extends( ),这个方法比较是对象的引用是否一致,但是在某些特殊的业务场景中,也可以重写该方法
super():
这是父类的构造方法,这行代码必须要放置在第一行,如果程序不显示写出,编译器也会默认添加上。
这个默认编译器会自动给我们添加子类构造的第一行
只能访问继承至父类的那一部分财产,私有财产除外(属性和行为)
super .
代表这来自于类型父类的财产,他不代表父类
super 作用范围:只可操作来自继承父类的财产(属性和行为)
this .
this():代表本类中其他构造函数,这个没有默认添加
this . 属性或this.行为():访问继承至父类的财产
this 作用范围:
1.可操作本类所有属性,可操作本类所有方法,还可操作来自继承父类的财产(属性和行为)
2.代表着由该类产生的对象自身,所以this.作用范围大于super.的作用范围,所以直接用this .
最终类和最终方法(final)
final类。一个类可以声明为最终类的。最终类不能被有子类。
final方法。一个方法可以声明为最终的。最终方法不能被重写。