大家好,又见面了,我是全栈君。
《编程导论(Java)·2.1.3改写(override)》,收集override内容.
方法改写(method overriding)是指对于父类定义的一个实例方法,同意子类提供自己的实现的一种语言特性。子类的实现将改写(override)或代替(replace)父类中的实现。
改写成功必须“同一时候”满足下列条件。
方法签名(signature)指一个方法的名字和形參列表。a method’s signature is its name and the number and the type of its arguments.。而重载方法的方法签名必须不同。本质上。签名不同的方法,是两个不同的方法。
public interface Sup{
public void copy();
}
class Sub implements Sup{
@Override public void copy(){
System.out.println("override");
throw new NullPointerException();
}
}
编译器无论RuntimeException。
父类的private方法。子类不继承。因而对子类而言毫无意义,如同不存在。
父类的static方法foo(),假设可以继承。子类可以依照改写的要求如訪问权限更公有、返回值类型同样等,编写方法签名同样的静态方法。可是。前面不可以加@Override。
两者并列存在。方法隐藏:在子类中直接调用foo(),则运行自定义的静态方法。假设没有自定义的foo()——仅仅有一个继承于父类的static方法foo(),在子类中直接调用foo(),显然运行唯一的foo()。
所以。自定义的静态方法挡住了父类的方法。
在能够继承的前提下:
父类的实例方法。子类能够override一个实例方法,可是子类不得定义签名同样的static方法-编译错误。
父类的静态方法,子类能够编写隐藏性的静态方法,可是子类不得定义签名同样的实例方法-编译错误。
如同比較男生和女生。改写是执行时机制,而重载是编译时机制。仅仅有读源码时才有比較的价值,刻薄地说,仅仅有考试时才有比較的价值。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115495.html原文链接:https://javaforall.cn