继承的概述:
多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),再让多个类去继承这个父类,
我们的多个类就可以获取到父类中的成员了 extends
不能继承的是 私有成员 和 构造方法
java中继承的特点:
java语言只支持单一继承,只能继承一个父类
java语言支持多层继承
继承中成员变量的特点:
子类只能获取父类非私有成员(变量)
子父类中成员变量的名字不一样直接获取父类的成员变量
子父类中成员变量名字是一样的获取的是子类的成员变量
就近原则:谁离我近我就用谁
如果有局部变量就使用局部变量
如果没有局部变量,有子类的成员变量就是用子类的成员变量
如果没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量
啥都没有,出错了
super:可以获取父类的成员变量和成员方法,用法和this是相似的
继承中成员方法的特点:
子类只能获取父类非私有成员(方法)
子类中没有这个方法,调用父类的
子类中重写这个方法,调用子类的
方法的重写:在子父类当中,子类的方法和父类的方法完全一样,子类重写了父类的方法(覆盖),
当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法
方法重写的应用场景:当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法
并可以在方法中使用关键字super调用父类的方法,这样做既可以保有父类的功能,也可以拥有子类持有的功能
方法重写的注意事项:
不能重写父类私有的方法
权限必须大于等于父类方法的权限
继承中构造方法的执行顺序:
在有子父类继承关系的类中,创建子类的对象,调用子类的构造方法,
如果子类构造方法的第一行代码没有调用父类的构造方法,则会默认的调用父类的无参构造
肯定会执行父类的构造,因为要先给父类的成员变量进行初始化,子类可能会使用到
我们可以使用super()在子类构造方法的第一行中调用父类的构造方法
this和super的区别:
this:当前对象的引用
调用子类的成员变量
调用子类的成员方法
在子类的构造方法第一行调用其他构造方法
super:子类对象的父类的引用
调用父类的成员变量
调用父类的成员方法
在子类的构造方法第一行调用父类的构造方法
匿名对象:没有名字的对象
匿名对象的应用场景:
当方法只调用一次的时候可以使用匿名对象
可以当作参数进行传递,但是无法在传参之前做其他的事情
注意:匿名对象可以调用成员变量并赋值,但是赋值并没有意义
final: 修饰符,可以用于修饰类,成员方法和成员变量
final所修饰的类:不能被继承,不能有子类
final所修饰的方法:不能被重写
final所修饰的变量:不能被修改,是常量
常量:
字面值常量:1,2,3
自定义常量:被final所修饰的成员变量,一旦初始化不可改变
注意:自定义常量必须初始化,可以选择显示初始化或者构造初始化
abstract:关键字,用于修饰方法和类
抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,
没有具体的方法体,没有具体方法的方法就是抽象方法
抽象类:有抽象方法的类必须是抽象类
注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就是抽象类
抽象类的特点:(一个抽象类不能创建对象 创建子类并且重写所有父类的抽象方法)
抽象方法只能在抽象类里面
抽象类和抽象方法必须被abstract修饰
抽象类不能创建对像(不能实例化)
抽象类中可以有非抽象的方法
抽象类和类的关系也是继承
一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
抽象类成员的特点:
成员变量
可以有成员变量,可以有常量
成员方法
可以有抽象方法,也可以有非抽象方法
构造方法
抽象类可以有构造方法,需要对抽象类的成员变量进行初始化
abstract 不能跟 final private static共存
|
|