继承
子类和父类,把共同的属性和行为写到一个类中(父类),然后让具有该种共同属性和行为的类(子类)继承父类,从而
获得和父类相同的属性和行为(这些属性和行为不能是父类私有的,也就不能是private修饰的)。继承提高了代码的复用
性
继承的方式:
应先定义一个父类,然后子类想继承父类需要用关键词 extends来继承,
格式:class A{} class B extends A{} --B类继承了A类
继承后的特点—成员变量:
- 如果子类中的变量名和父类中的变量名相同,那么子类中调用的时候,会优先从子类中调用。(调用变量的顺序是,先从子类中查找,再从父类中查找)
- 如果变量名重名,又需要使用父类的变量,可以用super关键词调用父类变量,方式是:super.变量名
- 不重名不影响
继承后的特点—成员方法:
- 不重名不影响,会先从子类中查找,再从父类中查找
- 重名的,就近原则
继承后的特点—构造方法:
- private 的成员跟继承无关
- 构造方法跟继承无关
- 子类对象创建
a)先创建父类部分,执行父类的构造方法
b)然后创建子类部分,执行子类的构造方法
c)子类对象把父类部包含进来 就近原则
成员方法重名—重写:
如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override)。
- 子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
- 注意事项
a)子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
public > protected >默认 > private
b)子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。否则,编译不报错,重写失败,子类增加一个
方法
c)在开发中,使用注解@Override 放在方法,让javac编译器,检测重写覆盖是否成功
d)在开发中,使用alt+INS 菜单,选覆盖重写,或者右键菜单generate 选覆盖重写
super、this关键字
- this和super
什么时候用到this和super关键字,当子类中的变量和父类中的变量同名时, 用this和super进行区分,this指向子类中的变
量(或者方法),super指向父类中的变量(或者方法)
this和super只能子类方法中使用,可调用变量或方法
this() 和 super()
- this() 表示执行本类的构造方法,super() 表示执行父类的构造方法
如果有参数,必须传参数
- 只能在子类构造方法的第一行使用,同子类构造方法中,只能调用super()或者this()
抽象类
如果父类中的方法,所有子类都重写,父类中的这个方法没有意思,被这个方法定义成抽象的方法,有抽象方法的类必须
写成抽象类。
- abstract 修饰的类是抽象类,修饰的方法是抽象方法
- 抽象类中可以没有抽象方法,有方法的类必须写成抽象类
- 子类继承父类,子类中必须重写父类中所有的抽象方法,否则子类必须是抽象类
注意:
不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
不一定包含抽象方法,但是有抽象方法的类必定是抽象类
必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类