本帖最后由 庄星睿 于 2012-7-15 09:11 编辑
对于方法重重写,视频里已经讲的很清楚了,但有一点忽略了,就是返回值类型可以不同,但子类方法的返回值必须小于等于父类,我总结了一下:
即子类包含和父类中同名的方法,被称为方法覆盖 override
方法的重写要遵循“两同两小一大”规则,“两同”指方法名相同,形参列表相同;“两小”指子类方法的返回值类型比
父类方法的返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;“一大”指的是
子类方法的访问权限应该比父类方法的访问权限更大或相等。
注意: 静态只能覆盖静态,如果父类方法具有 private 访问权限,则该方法对其子类是隐藏的,如果子类中定义了一个与父类private方法具有相同的方法名,相同的参数列表,相同的返回值类型的方法,依然不是重写,只是在子类中重新定义了一个新的方法。
写了一个例子(基本上都覆盖到了):
class FuException extends RuntimeException
{
}
class ZiException extends FuException
{
}
class Fu
{
Fu method() throws FuException //返回值类型为Fu
{
System.out.println("Fu...");
return new Fu();
}
}
class Zi extends Fu
{
protected Zi method() throws ZiException //这里只能抛父异常或者父类的子异常,返回值类型为Zi
{
System.out.println("zi....");
return new Zi();
}
public static void main(String[] args)
{
Fu f=new Zi();
f.method();
System.out.println("Hello World!");
}
}
|