1. 重写(Override)
重写,即重新写一遍。即在子类中把父类本身具有的方法重新写一次。子类继承 了父类原有的非私有方法,但并不想完全遵循父类方法的功能。所以在方法名、参数列表、返回类型都相同的情况下,对父类方法修改或重写,即我们所说的重写(Override)。但要注意重写的规则:
-
发生在之类与父类之间
-
父类中的私有方法不能被重写
-
重写父类方法时,访问权限不能比父类低,抛出异常不能比父类的异常范围广或抛出新的异常
-
父类有静态方法时,子类必须通过静态方法进行重写(严格意义上并非重写)
总结: 子类进行方法重写时,最好与声明一致。
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog = new Dog();
dog.eat();
}
}
class Animal {
public void eat() {
System.out.println("动物在吃东西");
}
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("Dog在吃东西");
}
}
2.重载(Overload)
在同一个类中,同名的方法有不同的参数列表(参数类型不同,参数个数不同,甚至是参数顺序不同)即为重载,重载对返回类型无要求,可以相同,也可以不同,但不能通过返回类型是否相同来判断重载.
总结:
- 重载(
Overload
)是一个类中多态性的一种表现 - 重载要求同名方法参数列表不同(参数类型,个数甚至是参数顺序)
- 重载时,返回值类型可以不同,也可以相同.不能以返回值类型作为是否重载的标准
public class Test01 {
public static void main(String[] args) {
Test01 test = new Test01();
test.eat();
test.eat("FEEL");
}
public void eat() {
System.out.println("谁在吃东西");
}
public void eat(String name) {
System.out.println(name + " 在吃东西");
}
}
3.重写和重载的区别
-
Override
是重写,Overload
是重载,两者都是实现多态的方式,区别在于重载是编译时的多态,而重写是运行时的多态. -
Overload
前提是在同一个类中,只要函数名相同,参数列表不同,即构成重载,与返回值无关 -
Override
出现在子类和父类中,子类必须和父类声明同样的方法和返回值类型.而且不能比父类被重写方法声明更多异常和拥有更大访问权限. - 重载对返回类型无要求,不能根据返回类型进行重载识别.