多态
多态分为动态多态和静态多态
动态多态
重写是一种动态多态,在运行时根据引用变量所指向的实际对象的类型来调用方法
静态多态
重载是一种静态多态,在编译期决定调用哪个方法
重写
class Dog{
public void bark(){
System.out.println("woof ");
}
}
class Hound extends Dog{
public void sniff(){
System.out.println("sniff ");
}
public void bark(){
System.out.println("bowl");
}
}
public class OverridingTest{
public static void main(String [] args){
Dog dog = new Hound();
dog.bark();
}
}
重写的条件
-
参数列表必须完全与被重写方法的相同;
-
返回类型必须完全与被重写方法的返回类型相同;
-
访问级别的限制性一定不能比被重写方法的强;
-
访问级别的限制性可以比被重写方法的弱;
-
重写方法一定不能抛出新的检查异常或比被重写的方法声明的检查异常更广泛的检查异常
-
重写的方法能够抛出更少或更有限的异常(也就是说,被重写的方法声明了异常,但重写的方法可以什么也不声明)
-
不能重写被标示为final的方法;
-
如果不能继承一个方法,则不能重写这个方法。
重载
class Dog{
public void bark(){
System.out.println("woof ");
}
//overloading method
public void bark(int num){
for(int i=0; i<num; i++)
System.out.println("woof ");
}
}
重载的条件
-
被重载的方法必须改变参数列表;
-
被重载的方法可以改变返回类型;
-
被重载的方法可以改变访问修饰符;
-
被重载的方法可以声明新的或更广的检查异常;
-
方法能够在同一个类中或者在一个子类中被重载。