《Java中方法的重写》

时间:2022-03-28 20:03:14
 //方法的重写
/*
注意:方法的重写要遵循“两同两小一大”规则
“两同”即方法名相同、形参列表相同;
“两小”(1)指的是子类方法返回值类型比父类方法的返回值类型更小或相等,【什么意思?】
(2)子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等。
“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或者相等。 特别注意:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。
例如下面代码会引起错误:
class BaseClass
{
public static void test(){code...}
}
class SubClass extends BaseClass
{
public void test(){code...}
}
*/
class Bird
{
public void fly()
{
System.out.println("我在天空*自在的飞翔...");
} public static void Test()
{
System.out.println("父类的静态方法运行...");
} private void Demo()
{
System.out.println("我在父类中是私有的,外边的类看不见我...");
}
} public class Ostrich extends Bird
{
//重写Bird类的fly()方法。
public void fly()
{
//通过super调用父类的方法。
//super.fly();
System.out.println("我只能在地上奔跑...");
} /*
如果我在子类中定义了下面的方法,则是子类和父类的方法的重载而不是重写了,
因为如果是重写的,则要求方法名也要相同。 //重载Bird类的fly()方法。
public void fly(int x)
{
//通过super调用父类的方法。
super.fly();
System.out.println("我只能在地上奔跑..."+x);
}
*/ //重写Bird类的Test()方法
public static void Test()
{
//通过类名调用父类中的Test()静态方法.
Bird.Test();
System.out.println("我覆盖了父类中的静态方法...");
} public static void Demo()
{
System.out.println("我是子类特有的方法,不是继承自父类的,因为父类是私有的!");
} public static void main(String[] args)
{
Ostrich os = new Ostrich();
os.fly();
os.A(); Test();//前面省略了类名Ostrich Demo();
}
}