这是多态最普通的定义的方法:
class A{
public void f(){
}
}
class BB extends A{
public void f(){
System.out.printf("BBBBBBB\n");
}
}
class Test{
public void m(A aa){//可以看出这里的参数是父类,但是在下面的调用的时候可以使用子类的参数,说明了一个函数可以实现多个
//功能,不过多态只能对共有的方法进行调用,如果是新的方法就不可以。
aa.f();
}
}
public class divideZero {
public static void main(String[] args){
Test test = new Test();
BB bb = new BB();
test.m(bb);
}
}
下面是多态和异常的结合:
class M extends Exception{
}
class N extends Exception{
}
class Q extends Exception{
}
class A {
public void f() throws M,N{
}
}
class BB extends A {
public void f() throws M{
System.out.printf("BBBBBBB\n");
}
}
class Test{
public void m(A aa){//可以看出这里的参数是父类,但是在下面的调用的时候可以使用子类的参数,说明了一个函数可以实现多个
//功能,不过多态只能对共有的方法进行调用,如果是新的方法就不可以。
try{
aa.f();
}
catch(Exception e){
e.printStackTrace();
}
}
}
public class divideZero {
public static void main(String[] args){
Test test = new Test();
BB bb = new BB();
test.m(bb);
}
}
note:
可以看到上面B类f()方法对A类的方法的重写的时候(注意这里并不是真正意义上的重写,而是有两个函数,具体看郝斌的视频),f()只能throws M,N或M或N,
因此子类throws的范围不能超过父类,其实非常的好理解,因为在写下面的异常语句的时候,下面的异常是对A进行操作的。
但是因为多态的原因,可以赋予子类的值,因此子类throws 的范围不能超过父类。