继承(extends) 定义:抽取多个类中存在的相同属性和行为,放到单独的类中,那么多个类则无需再定 义这些属性和行为,只需要继承那个类即可。 优点: A. 提高代码的复用性 B. 让类与类之间产生了关系 C. 多态的前提。 特点: A. java只支持(类的)单继承,不支持多继承(可能出现调用不明确的问题,在 继承的类中可能拥有相同的方法或者属性,导致调用时不知道调用哪一个) B. Java支持(类的)多(层)重继承
子类可以直接访问父类中的非私有的属性(成员变量)和行为(成员方法)
子类要想访问父类是私有成员变量和方法,可以通过父类的公共访问方式进行访问
Java支持多继承:接口
使用场景: 继承体现出一种关系。A is a B 前者为子类,B为父类 注意:不要仅仅为了获取部分功能,而去使用继承。 如果输出父类的成员变量 则可在父类构造方法进行访问
this和super
定义: This:本类的一个对象,指的是调用本方法的那个对象; Super:一个内存空间的标识,不是对象。 场景: this:解决局部变量隐藏成员变量的问题(指出成员变量); super:子类想要调用父类中和自己命名相同的方法和属性时 区别: This:从本类的成员的位置开始查找 Super:(代表父类的内存空间的标识)从父类的成员位置开始查找 使用: 成员变量: This.变量 ------- 当前类的变量 Super.变量 ------- 父类的变量 构造方法: This(参数)------ 本类的构造方法 This(参数) ------ 父类的构造方法 成员方法: This.方法名() ----- 本类的方法 Super.方法名() ----- 父类的方法
在子类中,输出局部范围的值,输出成员范围的值,输出父类成员变量的值,该怎么办? A. 局部范围的值,直接输出变量名即可。 B. 成员范围的值 输出this.变量名 即可 C. 父类成员变量的值 输出super.变量名 即可
重载和重写
方法重写(覆盖、复写): 定义:在子父类关系继承中,子父类中,出现方法相同的情况。方法名、参数列表 以及返回值类型要保持一致。 方法重载: 定义:同一类中,方法名相同,方法参数列表存在不同(参数的类型或者个数), 与返回值类型无关 注意: A. 父类中的私有方法不可以被覆盖(重写)(注意私有属性) B. 子类方法访问权限一定要大于等于父类的访问权限 C. 静态方法只能被静态方法重写。 D. 子类抛出的异常要小于等于父类抛出的异常 E. 覆盖的应用: 当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以复写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容
如果两个函数只有返回值类型不同,不属于重载,会造成函数调用不明确!
子父类中的构造方法
特点:子类的构造方法默认都去访问父类的无参构造方法 在子类中的构造方法中都有一行默认语句:super();
原因:子类继承父类,就拥有了父类的非私有数据,那么这些数据的初始化,需要通过 父类的构造函数来完成。所以,会去先调用父类的构造方法对数据初始化。并没有 创建父类对象!
构造方法是不可以重写的(重写的话,要保持方法名和类名一致,但是,子父类的构造 方法名都要和本类名一致,所以两者冲突),也不可以重载(重载要求方法名一致)。
父类中没有无参的构造方法: A. 可以通过super(参数)去访问父类中的带参构造方法 B. 可以通过this(参数...)去访问本类中的其他构造方法。
代码块
静态代码块: 特点:只执行一次,初始化成员。 构造代码块: 作用:把所有构造方法中的共同内容定义在构造代码块中 局部代码块:定义在方法中的代码块 作用:让变量尽可能早的从内存中消失,提高效率 代码块的面试题: 执行顺序:静态代码块>构造代码块>构造方法 A. 父类优先于子类 B. 静态优先于非静态 C. 构造代码块优先于构造方法 父类静态代码块 子类静态代码块 父类构造代码块 父类构造方法 子类构造代码块块 子类构造函数
如何使用父类的私有成员变量: 在类中构造公共访问方法,通过公共访问方法访问父类的私有成员变量
Final 关键字
最终的意思。 A. 修饰类,修饰的类不能被继承 B. 修饰成员变量,修饰的成员变量实际是一个常量,必须赋值,且不能重新赋值 C. 修饰成员方法,成员方法不能被重写 Final修饰的变量其实是一个常量 常量:字面值常量、定义常量 定义final修饰的数组 表示其指向的内存地址不会发生改变 |