2、 方法覆写:
·子类方法的名称、参数名、返回类型与父类方法一致。
·子类方法不能缩小父类方法的访问权限。
·子类方法不能抛出比父类方法更多的异常子类。
·父类的静态方法不能被子类覆盖为非静态方法。(一下代码会导致编译错误)。
public class Sup { public static void methed1(){ } } public class Sub extends Sup { public void methed1(){ /*警告,编译有错误*/ } } |
·子类可以定义与父类的静态方法同名静态方法,以便在子类中隐藏父类的静态方法。(但是也必须满足:子类方法的名称、参数名、返回类型与父类方法一致、子类方法不能缩小父类方法的访问权限、子类方法不能抛出比父类方法更多的异常子类的条件)
·子类的非静态方法不能被子类覆盖未静态方法。(编译出错)
public class Sup { public void methed1(){ } } public class Sub extends Sup { public static void methed1(){ /*警告,编译有错误*/ } } |
|
·所以由上面可以知道:子类复写与父类时,方法只能同时为Static,而不能一个为static一个不是static类型。
·父类的抽象方法可以被子类通过两种途径覆盖:1,、子类实现了父类的抽象方法;2、是子类重新声明父类的抽象方法。
public abstract class Sup { abstract void methed1(); abstract void methed2(); } public abstract class Sub extends Sup { void methed1(){//实现父类的方法 } abstract void methed2();//重新声明method2方法。 } |
·父类的非抽象方法可以被覆盖未抽象方法。
public abstract class Sup { void methed1(){ } } public abstract class Sub extends Sup { abstract void methed1();//合法 } |