面向对象的特征之二:继承性
一丶继承的好处:
①:减少了代码的冗余,提高了代码的复用性
②:便于功能的扩展
③:为之后多态性的使用,提供了前提
二丶继承的格式:class A extends B{}
A:子类丶派生类丶subclass
B:父类丶超类丶基类丶superclass
1丶体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明所有的结构丶属性丶方法
2丶特别的:父类中声明为private的属性或方法,子类继承父类以后,任然认为获取了父类中私有的结构。只有因为封装性的影响,使得了子类不能直接调用父类的结构而已。
3丶子类继承父类以后,还可以声明自己特有的属性或方法,实现功能的扩展。
子类和父类的关系,不同于子集和集合的关系。
extends:延展丶扩展
三丶java中关于继承性的规定
①:java只支持单继承和多层继承,不允许多重继承
②:一个子类只有一个父类
③:一个父类可以派生出多个子类
class SudDemo extends Demo{} ✔
class SudDemo extends Demo1,Demo2{} ✘
④:子父类是相对的概念图
⑤:子类直接继承的父类称为:直接父类, 间接继承的父类称为:间接父类
⑥:子类继承父类以后,就获得了直接父类以及所有间接父类中声明的属性和方法
⑦:Object类是所有类的父类
⑧:当父类没有定义构造器默认空参构造器
⑨:父类有定义带参构造器时继承的子类必须赋值父类的带参构造器
可以使用super关键字
public Cat(){super("悠米");}
四丶Object类
1丶如果我们没有显式的声明一个类的父类的话,则此类继承于java.lang.Object类
2丶所有的java类(除java.lang.Object类之外)都直接或间接的继承于java.lang.Object类
3丶意味着,所有的java类具有java.lang.Object类声明的功能
五丶子类方法的重写与方法的重载
1丶对父类继承的方法重写一遍
2丶子类中 可以用super->调用父类的成员(属性和方法)
3丶重载:跟父类方法名一致,形参不一致
4丶重写:方法名,参数跟父类一致方法内容不同
(Overloading):重载:“如果一个类有多个名字相同但参数个数不同的方法,我们通常称这些方法为方法重载。 ”我面带着朴实无华的微笑继续说,“如果方法的功能是一样的,但参数不同,使用相同的名字可以提高程序的可读性。”
(Overriding):重写:如果子类具有和父类一样的方法(参数相同、返回类型相同、方法名相同,但方法体可能不同),我们称之为方法重写。 方法重写用于提供父类已经声明的方法的特殊实现,是实现多态的基础条件。”
六丶抽象类
1丶抽象类的定义:用abstract修饰的类称为抽象类。抽象就是不具体的意思。作为中层或者顶层设计/任务的下发
2丶抽象类有以下几点特点:
①:含有抽象方法的类必须声明为抽象类
②:抽象类可以声明构造方法但不能被实例化
③:抽象方法不能有方法体,即抽象类中的抽象方法只能进行声明,不能有具体的实现:例:abstract public String getUserName();
④:子类继承抽象类即抽象类是父类,子类必须重写抽象类的抽象方法,否则子类本身也必须声明为抽象类
⑤:所有的动作丶业务丶功能靠new子类来实现
⑥:抽象类中可以存在属性和方法(该方法可以不是抽象方法),即抽象类中可以有非抽象的方法和属性
⑦:abstract 抽象方法,普通类不能拥有
3丶抽象类中的final关键字
①:final:常量,相当于c#中的const
②:声明的时候必须要赋值
③:属性不能被更改
④:可以修饰方法,修饰后的方法子类继承后就不能被重写
⑤:可以修饰类,修饰后的类不能被继承
⑥:fianl不能加在抽象的方法中。继承的子类不能重写方法,目标相反程序报错
练习小作业:
1.请用继承体系创建出以下类:
人类
学生类 教授类
属性 方法自定义。
2.完成以下功能:
学生类的学习方法重载出三个
教师类的授课方法重载出三个
并且人类的构造方法重载出两个
3.创建一个学校类
学校类有方法输出:xx老师在给xx学生上课