首页 > 代码库 > Java override
Java override
扩展《编程导论(Java)·2.1.3》的内容,收集override内容.
方法改写(method overriding)是指对于父类定义的一个实例方法,允许子类提供自己的实现的一种语言特性。子类的实现将改写(override)或取代(replace)父类中的实现。
改写成功必须“同时”满足下列条件。
- 两者的方法签名完全相同。
- 返回类型必须相同或是子类。Java 5.0之前,返回类型不同将导致编译错误。Java 5.0之后,改写方法的返回类型可以是(被改写方法的返回类型的)子类。covariant return type
- 方法改写时,访问权限不能变得更加私有。不要求两者访问修饰符相同,但如果父类的方法是包私有的,则改写的方法可以用包私有的、protected和public修饰;如果父类的方法是public,则改写的方法只能用public修饰。
- 改写的方法,不能抛出比父类方法更多的检查型异常。
public interface Sup{ public void copy(); } class Sub implements Sup{ @Override public void copy(){ System.out.println("override"); throw new NullPointerException(); } }编译器不管RuntimeException。
- 父类的方法不是final方法。final方法不能够被改写。
- 父类的方法不是private或static方法。否则,即使编写了签名完全相同的方法,但是它们与改写机制无关。
父类的static方法foo(),如果能够继承,子类可以按照改写的要求如访问权限更公有、返回值类型相同等,编写方法签名相同的静态方法,但是,前面不能够加@Override。两者并列存在。方法隐藏:在子类中直接调用foo(),则执行自己定义的静态方法。如果没有自己定义的foo()——只有一个继承于父类的static方法foo(),在子类中直接调用foo(),显然执行唯一的foo()。所以,自己定义的静态方法挡住了父类的方法。
在可以继承的前提下:
父类的实例方法,子类可以override一个实例方法,但是子类不得定义签名相同的static方法-编译错误。
父类的静态方法,子类可以编写隐藏性的静态方法,但是子类不得定义签名相同的实例方法-编译错误。
overriding与overloading
如同比较男生和女生。改写是运行时机制,而重载是编译时机制。只有读源代码时才有比较的价值,或者说,只有考试时才有比较的价值。
Java override
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。