重写父类的方法
子类扩展父类--总是以父类为基础,额外增加新的属性和方法。但有一种情况例外:子类需要重写父类的方法。
例5.2 子类重写父类的方法
public class Bird{
public void fly(){
System.out.println("我在飞");
}
}
public class Ostrich extends Bird{
//重写Bird类的fly方法----方法覆盖(override)
public void fly(){
System.out.println("我只能在地上奔跑");
}
public static void main(String[] args){
Ostrich os = new Ostrich();
os.fly(); //调用的是Bird的fly还是Ostrich的fly?
}
}“两同两小一大”规则
“两同”即方法名相同,形参列表相同;
“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
“一大”指的子类方法的访问权限应比父类方法更大或相等;
覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。 方法重写和方法重载的区别
覆盖是子类和父类之间的关系;而重载是同一类内部多个方法之间的关系。
覆盖一般是两个方法间的,而重载可能有多个重载的方法。
覆盖的方法有相同的方法名和形参表;而重载的方法只能有相同的方法名,不能有相同的形参表。
覆盖时根据调用它的对象来区分方法;而重载是根据形参表来决定调用的是哪个方法。
子类扩展父类--总是以父类为基础,额外增加新的属性和方法。但有一种情况例外:子类需要重写父类的方法。
例5.2 子类重写父类的方法
public class Bird{
public void fly(){
System.out.println("我在飞");
}
}
public class Ostrich extends Bird{
//重写Bird类的fly方法----方法覆盖(override)
public void fly(){
System.out.println("我只能在地上奔跑");
}
public static void main(String[] args){
Ostrich os = new Ostrich();
os.fly(); //调用的是Bird的fly还是Ostrich的fly?
}
}“两同两小一大”规则
“两同”即方法名相同,形参列表相同;
“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
“一大”指的子类方法的访问权限应比父类方法更大或相等;
覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。 方法重写和方法重载的区别
覆盖是子类和父类之间的关系;而重载是同一类内部多个方法之间的关系。
覆盖一般是两个方法间的,而重载可能有多个重载的方法。
覆盖的方法有相同的方法名和形参表;而重载的方法只能有相同的方法名,不能有相同的形参表。
覆盖时根据调用它的对象来区分方法;而重载是根据形参表来决定调用的是哪个方法。