【继承】
继承:多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取到父类中的成员了。
关键字: extends
继承特点:java语言只支持单一继承,只能继承一个父类(一个儿子只能有一个亲爹)
java语言支持多层继承(一个儿子可以有一个亲爹,还可以有一个亲爷爷)
继承中成员变量的特点:
字类只能获取父类非私有成员
子父类中成员变量的名字不一样直接获取父类的成员
子父类成员变量名字是一样的获取的是字类的成员变量
就近原则: 谁离我近我就用谁
如果有局部变量直接使用局部变量
如果没有局部变量,有字类的成员变量就是用字类的尘缘变量
如果没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量
啥都没有,就出错了
super:可以获取父类的成员变量和成员方法,用法和this是相似的
案例:
继承中成员方法的特点:
子类只能获取父类非私有成员
子类中没有这个方法,调用父类
子类重写了这个方法,调用子类的
方法的重写:在子父类,字类的方法和父类的完全一样,子类重写了父类的方法(覆盖,当字类重写了父类的方法之后,使用子类对象调用的就是子类的方法)
方法重载:在一个类中,有多个重名的方法,但是其参数不一样,(参数个个数,参数的类型,参数的顺序)和返回值无关
案例:
已知父类Dad4
行为:吃方法 分别打印”小酌两口” 和 “去睡觉”
已知子类Kid4
行为:吃方法 打印”好好吃饭”
已知测试类:
创建子类对象,调用吃方法
方法重写的应用场景:当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法.
并可以在方法中使用关键字super调用父类的方法,这样做既可以保有父类的功能,也可以拥有子类特有的功能
方法重写的注意事项:
1. 不能重写父类私有的方法,
2. 权限必须大于等于父类方法的权限
注解: @开头
常见的:@Override//重写父类方法
继承中的构造方法执行顺序:
在有子父类继承关系的类中,创建子类的对象,调用子类的构造方法,
如果子类构造方法的第一行代码没有调用父类的构造方法,默认的调用父类的无参构造
肯定会先执行父类构造,因为要先给父类的成员变量进行初始化,子类可能会使用到
我们可以使用super()在构造方法的第一行中调用父类构造方法
注意:静态方法里面不能出现this. super.
this和super的区别
this:当前对象的引用
调用子类的成员变量
调用子类的成员方法
在子类构造方法第一行调用子类其他构造方法
super:子类对象的父类引用
调用父类的成员变量
调用父类的成员方法
在子类的构造方法第一行调用父类的构造方法
继承的优缺点
优点:提高了代码的复用性
提高了代码的可维护性
缺点:
类的耦合性增强了
开发原则:高内聚低耦合
内聚:就是自己完成某件事的能力
耦合:类与类的关系
【匿名对象】
匿名对象:没有名字的对象;(没有变量引用的对象)
匿名对象应用场景:
当方法只调用一次的时候 可以用匿名对象
可以当作参数进行传递,但是无法再传参之前做其他事
注意:匿名对象可以调用成员对象并赋值,但是赋值斌没有意义
【final】的概述和作用
final:修饰符,可以用于修饰类,成员方法和成员变量
final修饰的类:不能被继承,不能有子类
final修饰的方法: 不能被重写
final修饰的变量;不可以修改,是常量,被final所修饰的成员变量,一旦初始化则不可改变
注意:自定义常量必须初始化,可以选择显示初始化,或者构造初始化
【抽象类】abstract
abstract:关键字,用于修饰方法和类
抽象方法:不同类的方法时想死,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体, 没有具体方法就是抽象方法.
抽象类:有抽象方法的类必须是抽象类
注意:一个类继承了抽象类,需要重写他所有的抽象方法,否则这个类就得是抽象类
抽象类的特点:
抽象方法只能在抽象类里面
抽象类和抽象方法必须被abstract修饰
抽象类不能创建对象(不能实例化)
抽象中科院有非抽象的方法
抽象类和类的关系也是继承
一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
抽象类的成员特点:
成员变量:可以有成员变量,可以有常量
成员方法:可以有抽象方法,可以有非抽象方法
构造方法:可以有构造方法,需要对抽象类的成员进行初始化
abstract不能和哪些关键字共存 static private final
抽象类中是否有构造函数? 有
抽象类中可不可以没有抽象方法?
|
|