继承的好处:
①实现代码重用,减少代码冗余
②便于功能的拓展,方便修改代码
③为之后多态性的使用,提供了前提
④将子类共有的属性和行为放到父类
⑤符合is-a关系的设计使用继承(与真实世界类似)
继承性的格式:
class A extends B{}
A:子类、派生类
B:父类、基类
体现:一旦子类A继承父类B之后 子类A中就获取了子类B所有的属性和方法
特别的:父类中声明private的属性和方法,子类继承父类以后,仍然认为获取了父类中的私有的结构,只有因为封装性的影响,使得子类不能直接调用父类结构而已。
语法:
修饰符 SubClass extends SuperClass { //类定义部分 }
注意:不可以使用private和protect修饰类,继承要符合is-a关系
如果修饰符是public 则该类在整个项目中可见,若无public修饰符则该类只在当前包可见
子类继承父类之后,还可以声明自己特有的属性或方法:实现功能的拓展。
使用继承:Java中通过extends关键字实现继承
- 子类访问父类成员:
-
- 1、通过this关键字
- 2、通过super关键字
- super(); //无参构造
- super(name); //有参构造
-
- this():调用无参构造
- this("柳柳",15):调用有参构造
- 必须把调用放在第一行
注:默认情况下,实例化子类对象,系统会先去调用父类无参构造方法再去调用子类无参构造方法
-
- 默认情况下,子类中的构造方法会隐式调用父类的无参构造方法
Java中关于继承性的规定:
①Java只支持单继承和多层继承,不允许多重继承(C++支持)
②一个类可以被多个子类继承
③Java中的单继承性:一个子类只能有一个父类
④子父类是相对的概念
⑤子类直接继承的父类称为:直接父类,间接继承的父类称为:间接父类
⑥子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
object类的理解
①如果没有显式声明一个类的父类,则此类继承于Java.lang.object类
②所有的Java类(除Java.lang.object类之外)都直接或间接继承于Java.lang.object类
③意味着,所有的Java类都具有Java.lang.object类声明的功能
子类访问父类成员(使用super关键字,super代表父类对象)
①访问父类构造方法(在子类构造方法中调用且必须是第一句)
super();
super(name);
②访问父类属性
super.name;
③访问父类方法
super.print();
注:super只能出现在子类的方法和构造方法中
super调用构造方法时,只能是第一句
super不能访问父类的private成员
父类不能被子类继承的父类成员
①private成员
②子类与父类不在同包,使用默认访问权限的成员
③构造方法
访问修饰符protected
①可以修饰属性和方法
②本类、同包、子类可以访问
多重继承关系的初始化顺序
父类属性-->父类构造方法-->子类属性-->子类构造方法
构造方法不能被重写,因为它不能被继承
方法重写的规则:(三同一不同)
快捷键:Ctrl+O
- final修饰符:
- 修饰的类,不能再被继承
- 修饰的方法,不能被子类重写
- 修饰的变量将变成常量,只能在初始化时进行赋值
- 使用final修饰引用型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的
- 抽象类和抽象方法:限制实例化
- 抽象类不能被实例化
- 抽象类可以有0~多个抽象方法
- 非抽象子类必须重写父类的所有抽象方法
- abstract也可用于方法——抽象方法
- 抽象方法没有方法体
- 抽象方法必须在抽象类里
- 抽象方法必须在子类中被实现,除非子类是抽象类