继承
格式: public class 子类 extends 父类(超类、基类) {}
特点:子类可以继承父类的非私有方法和属性(不继承构造方法)
好处:1.减少代码的冗余,相同代码重复利 用
2.使类与类之间产生关系
注意:继承只能是单继承,不能多继承,但是可以多层继承(一个父类多个子类 is-a)
继承后成员访问特点:
-
非私有成员
- 非同名:可以点用父类的非私有成员成员变量
- 同名:子类有的就调用子类的,子类没有就用父类的,父类都没有就报错
-
成员方法私有:不可以调用父类私有的方法,可以间接用set/get调用
-
构造方法:子类不能继承父类的构造方法,但可以根据父类的构造方法生成自己的构造方法
方法重写:
- 作用:重写父类方法
- 如何重写:子类重写方法与父类的方法名、参数列表 、返回值相同
- 注意:子类的权限一定要比父类权限大(public > protected > default > private)
- @Override注解:在方法上面加上@Override注解可以检测重写是否成功
继承内存图:在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构造方法调用时,一定先调用父类的构造方法。
- this()和super()注意事项:
1.this()和super()只能存在构造方法第一条执行语句(两个只能存在一个)
2.如果父类没有空参构造器,子类调用super()就会报错
this和super关键词
-
super
- super使用:
1.super(参数):访问父类的构造方法【常用,但是会自动生成】
2.super.成员变量:访问父类的成员变量
3.super.成员方法():访问父类的成员方法 - super:存储父类对象的引用,可以访问父类的成员变量,成员方法,构造方法
- super注意事项一:super访问成员变量和成员方法: 优先去父类中找,如果有就直接使用,如果没有就去爷爷类中找,如果有,就用,依次类推…
- super注意事项二:子类的构造方法默认会调用父类的空参构造方法,如果父类中的没有空参构造方法,只定义了有参构造方法,会编译报错
- super使用:
-
this
- this使用:
1.this(参数):访问本类的构造方法
2.this.成员变量:访问本类的成员变量【常用,但会自动调用】
3.this.成员方法():访问本来成员方法 - this:存储当前对象的引用,可以调用本类的成员变量,成员方法,构造方法
- this使用:
抽象类
概述:使用abstract关键词修饰的类就是抽象类
特点:这种类不能被创建对象,它就是用来做父类的,被子类继承的
格式:
抽象方法:
- 定义格式:
- 抽象方法定义:抽象方法没有方法体,使用abstract修饰的方法就是抽象方法
注意:
1.抽象类中的抽象方法,子类继承时必须重写
2.抽象类中可以没有抽象方法,但有抽象方法的一定是抽象类(接口)
匿名对象
匿名对象适用于只使用一次的对象时候
设计模式-模板设计模式
针对某些情况,在父类中指定一个模板,然后根据具体情况,在子类中灵活的具体实现该模板
子主题 2
final关键词
定义: final修饰的,自定义常量的命名: 所有字母都大写, 单词和单词之间使用_分开
idea 大小写切换: ctrl + shift + u
特点:
final修饰的类不能被继承
final修饰的方法不能被重写
final修饰的变量就变成了常量, 它的值不能修改
局部变量:
声明并赋值
先声明后赋值(使用前必须赋值)
成员变量:
声明并赋值
先声明后赋值 要求: 必须在构造方法中赋值, 如果有多个构造方法, 每个构造方法都要赋值 (扩展, 也可以在构造代码块中赋值)
注意:如果自定义常量是引用数据类型的话:
不可以发生改变的是, 对象的地址值
而对象中的属性值是可以发生改变的
static关键词
定义:static : 静态 => 跟类产生关联
作用:static 可以用来修饰成员变量和成员方法(也可以修饰其他内容, 后面学习)
static修饰的成员变量: 类变量
static修饰的成员方法: 类方法
static修饰的成员变量和成员方法, 随着类的加载而加载, 优先于对象存在
特点:
1. static修饰的成员变量, 被它所在类的所有对象所共享(多线程的时候会使用)
2. static修饰的成员变量和成员方法, 可以使用 类名.变量名 列名.方法名() 方式去调用