继承
定义:
多个类有共同的成员变量与成员方法,抽取到另外一个类中(父类),再让多个类去继承这个父类,
我们的多个类就可以获取到父类中的成员了
注意:
构造方法不能够继承。
关键字:
extends
特点:
java中只支持单一继承,不支持多继承。
java语言支持多层继承。
继承中成员变量的特点
子类只能获取父类非私有成员
成员变量的名字不一样直接获取父类的成员变量
子父类中成员变量名字是一样的获取的是子类的成员变量
就近原则:
谁离我近我就用谁
如果有局部变量,就是用局部变量
如果没有局部变量,有子类的成员变量就使用子类的成员变量
如果没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量
如果还没有,就报错了
关键字:
super:可以获取父类的成员变量和成员方法,用法和this是相似的
继承中成员方法的特点
子类中没有这个方法,调用父类的
子类中重写了这个方法,调用子类的
方法的重写:
在子父类中,子类的方法和父类的方法完全一样,子类重写了父类的方法(覆盖),
当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法
方法的重载:
在一个类中,有多个重名的方法,但是其参数不一样
方法重写的应用场景:
当父类中的方法不能完全满足子类的使用,这个时候子类重写父类的方法,这个时候子类重写父类的方法,
并可以在方法中使用关键字super调用父类的方法,这样做既可以包邮父类的功能,也可以拥有子类特有的功能。
方法重写的注意事项:
不能重写父类中的私有方法
权限必须大于等于父类方法的权限
注解:
@:
@Override:强制重写。
继承中的构造方法的执行顺序:
在有子父类继承关系的类中,创建子类的对象,调用子类的构造方法,如果子类构造方法的第一行代码没有调用父
类的构造方法,则会默认的调用父类的无参构造
肯定会执行父类的构造方法,因为要先给父类的成员变量进行初始化,子类可能会使用到。
我们可以使用super()子类构造方法的第一行中调用父类的构造方法。
this 与 super的区别:
this:当前对象的引用。
调用子类的成员方法
调用子类的成员变量
在子类的构造方法第一行调用子类其他的构造方法
super:子类对象的父类引用
调用父类的成员方法
调用父类的成员变量
在子类的构造方法第一行调用父类的构造方法
继承的优缺点:
优点:
提高了代码的复用性
提高了代码的可维护性
缺点:
类的耦合性增强了
开发原则:高内聚,低耦合。
内聚:就是自己完成某件事情的能力
耦合:类与类的关系
匿名对象:
没有名字的对象
没有变量引用的对象
匿名对象的应用场景:
当方法只调用一次的时候可以使用匿名对象。
可以当作参数进行传递,但是无法在传参之前做其他事情。
final修饰符:
可以用于修饰类,成员方法和成员变量。
final所修饰的类:不能被继承,不能有子类。
final所修饰的方法:不能被重写
final所修饰的变量:不能被修改。是常量。
常量:
字面值常量:1,2,3,4
自定义常量:被final所修饰的成员变量,一单初始化就不能被修改
注意:
自定义常量必须初始化,可以选择显示初始化,或者构造初始化
2017/10/1
抽象类:
有抽象方法的类,必须是抽象类
注意:一个类继承了抽象类,必须重写父类中的抽象方法。否则这个类就得是抽象类。
abstract关键字:
用于修饰方法和类
抽象方法:
不同类的方法是相似的,但是具体内容又不太相同,所以我们只能抽取他的声明,
没有具体的方法体,没有具体方法体的方法就是抽象方法
抽象类的特点:
抽象方法只能在抽象类中
抽象类与抽象方法必须被abstract修饰
抽象类不能创建对象,也称为不能实例化。
抽象类中可以有非抽象方法。//非抽象方法,子类可以不用重写
抽象类和类的关系也是继承
一个类继承抽象类要么重写所有的抽象方法,要么他自己是抽象类
抽象类的成员特点
成员变量:
可以有成员变量
可以有常量
成员方法:
可以有抽象方法
可以有非抽象方法
构造函数:
抽象类可以有构造方法,
需要对抽象类的成员变量进行初始化
final:修饰类,成员变量,成员方法。被修饰的类不能被继承
教师案例:
有两个老师,基础班老师,就业班老师
员工实例:
需求:
公司中
程序员 姓名,工号 薪水 工作
项目经理 姓名 工号 薪水 工作 还有奖金
抽象类的细节
抽象关键字abstract不可以和那些关键字共存?
final private static
抽象类中是否有构造函数
有。需要给成员变量进行初始化。
抽象类可不可以没有抽象方法?
可以。
作用就是不实例化,和私有化构造方法相同
抽象类的思想
|
|