继承:
当多个类之间有相同的特征和行为时,可以将相同的内容提取出来组成 一个公共类,让多个类吸收公共类中已有特征和行为而在多个类型只需 要编写自己独有特征和行为的机制,叫做继承。
在Java语言中使用extends(扩展)关键字来表示继承关系。
public class Worker extends Person{} - 表示Worker类继承自Person类
其中Person类叫做超类、父类、基类。
其中Worker类叫做派生类、子类、孩子类。
继承的特点:
a.子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承 只是不能直接访问。
b.子类默认调用父类的无惨构造,相当于调用super(),如果想要调用父类的有参构造,需要手动在第一行添加 super(父类构造参数) ;
c.使用继承 ,必须符合 is a 的关系
d. 一个子类只能有一个父类,不支持多继承
子类的子类叫间接子类。
重写:
super.show() //调用父类的show 方法
使用 @Override 标注
重写原则:
返回值类型,方法名,参数列表相同,从java5 开始,返回值类型可以是子类型
访问权限不能变小,可以相同或者变大
不能抛出更大的异常
构造块块,静态代码块,构造方法 执行顺序例子:
package com.lagou.task08; public class SuperTest { { System.out.println("构造块"); } static { System.out.println("静态代码块"); } public SuperTest(){ System.out.println("构造方法"); } public static void main(String[] args) { SuperTest st= new SuperTest(); } }
package com.lagou.task08; /* * 先加载父类,再加载子类 * 执行顺序: * --》父类静态代码块--》子类静态代码块 * --》父类构造块--》父类构造方法 * --》子类构造块--》子类构造方法 * * */ public class SubSuperTest extends SuperTest { { System.out.println("======构造块"); } static { System.out.println("=========静态代码块"); } public SubSuperTest(){ System.out.println("====构造方法"); } public static void main(String[] args) { SubSuperTest st= new SubSuperTest(); } }
执行结果:
=========静态代码块
构造块
构造方法
======构造块
====构造方法
权限修饰符:
public 可以在任意位置访问
protected 不在一个包中也没有父子关系才不能访问
默认 的只能在本类和同一个包中的类访问,注意默认的子类也不能访问
private 只能在本类内部使用
import 静态方法
import static java.lang.System.out
final 关键字修饰的类 不能被继承
final 关键字修饰的方法不能被重写,可以被继承
final 关键字修饰成员变量,必须初始化,且不能被改变(防止成员变量被改变)
可以显式初始化,即声明的同时进行初始化
可以在构造块中初始化
可以在构造方法中初始化
常量一般使用 public static final 修饰
package com.lagou.task08; public class FinalMemberTest { // private final int cnt = 1; // 显式初始化 private final int cnt; /*{ cnt = 2; // 构造块中进行初始化 }*/ public FinalMemberTest() { cnt = 3; // 构造方法体中进行初始化 } public static void main(String[] args) { // 声明FinalMemberTest类型的引用指向该类的对象 FinalMemberTest fmt = new FinalMemberTest(); // 打印成员变量的数值 System.out.println("fmt.cnt = " + fmt.cnt); // 0 1 2 3 } }
补充内容:
子类和父类共有的属性,使用super区分
本类的属性,this.
父类的属性,super.
文章来自拉勾教育 大数据开发