参考:
https://www.liaoxuefeng.com/wiki/1252599548343744/1260455778791232
多态 Polymorphic
针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。——多态
Person p = new Student();
实际类型Student,变量的声明类型Person。
调用super
在子类的覆写方法中,如果要调用父类的被覆写的方法,可以通过super来调用。
class Person {
protected String name;
public String hello() {
return "Hello, " + name;
}
}
Student extends Person {
@Override
public String hello() {
// 调用父类的hello()方法:
return super.hello() + "!";
}
}
final
继承可以允许子类覆写父类的方法。如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final。用final修饰的方法不能被Override:
class Person {
protected String name;
public final String hello() {
return "Hello, " + name;
}
}
Student extends Person {
// compile error: 不允许覆写
@Override
public String hello() {
}
}
如果一个类不希望任何其他类继承自它,那么可以把这个类本身标记为final。用final修饰的类不能被继承:
final class Person {
protected String name;
}
// compile error: 不允许继承自Person
Student extends Person {
}
对于一个类的实例字段,同样可以用final修饰。用final修饰的字段在初始化后不能被修改。final修饰的field必须在创建对象时初始化,随后不可修改。例如:
class Person {
public final String name = "Unamed";
}
class Person {
public final String name;
public Person(String name) {
this.name = name;
}
}