Class 类

规则规范

一个文件只能有一个public类,与文件名同名,建议一个文件只定义一个类

成员变量 规范不在声明处赋值

Constructor 构造方法 / 构造器

this

代表 本类/本类的实例,

this.propName 当前对象 属性

this() 本类的构造方法,必须在第一行

m(this) 传递 当前对象 给方法m

extends 继承

1
2
3
4
5
class 父类 {
}

class 子类 extends 父类 {
}

子类,拥有父类中的 属性和方法(非 private 的),也可以重写
private 的成员变量实际上也被继承了,只能通过 getter 和 setter 访问
static 方法可以被继承,但不能被重写,如果子类定义了同名方法,则是隐藏了父类的方法(不能使用@Override

super

super() 代表父类的构造器,
只能放在子类构造器内的第一行
只能调用一次

如果不写super,默认隐式调用一个 super()
如果父类没有空参构造器,必须显式调用 super(...)

super.methodName() 调用父类方法

虚方法

虚方法:在运行时由实例的实际类型决定的方法,而不是在编译时就确定的方法。

方法不是 final 或 static 或 private 的,就是虚方法。

可继承

  • 虚方法表中的
  • static方法(但不能重写)

Override 重写

@Override 重写方法注解,检查作用

重写要求:

  • 名称、形参一致
  • 访问权限,必须大于等于父类(只能更宽松)
  • 返回值类型,必须小于等于父类(等于父类 或其子类)
  • 只有虚方法表中的,才能重写

不能被重写的(使用重写注解错误):
static 方法可以被继承,但不能被重写,如果子类定义了同名方法,则是隐藏了父类的方法
private 不能被重写

final

final类, 最终类,不能被继承:

1
final class 类名 {}

final 方法,不能被子类重写:

1
[public/private/default/protected] final 返回值类型 方法名(){}

以及,final变量。

多态

向上转型:

1
Animal a = new Dog(); //向上转型

向下转型:

1
2
3
4
5
6
7
8
9
Animal a = new Dog(); //向上转型
a.eat(); //输出 Dog eatting...

Dog d = (Dog) a; //向下转型,安全
d.eat(); //输出 Dog eatting...
d.bark(); //输出 Dog barking...

Cat c = (Cat) a; //向下转型,不安全 // 抛出异常 java.lang.ClassCastException
c.meow(); //不会执行

类型判断:

1
2
3
4
if(a instanceof Cat) {
Cat c = (Cat) a;
c.meow();
}

Java14 新特性:

1
2
3
4
// 如果结果为 true ,则直接进行类型转换
if(a instanceof Cat c) {
c.meow();
}

default 方法

Java8新特性,可以被实现类继承、重写或忽略,也可以被接口的引用调用

必须有方法体,如果 Override 需去掉 default

可变参数

1
2
3
void method(String...s) {

}

可变参数个数,底层是数组