Java之旅_面向对象_重写和重载

参考并摘自:http://www.runoob.com/java/java-override-overload.html

重写(Override)

子类对父类(允许访问的)方法的实现过程进行重新编写,形参和返回值都不能变。即外壳不变,核心重写。

重写不能抛出比父类更宽泛的异常。

class Animal{
    public void eat(int n){
        System.out.println("Animal eat:"+n);
    }
}
class Dog extends Animal{
    public void eat(int m){
        System.out.println("Dog eat:"+m);
    }
}
public class Test{
    public static void main(String[] args){
        Animal animal = new Animal();
        Animal dog = new Dog(); //注释行
        animal.eat(10);
        dog.eat(20);
    }
}
运行结果:
Animal eat:10 Dog eat:20

 上面注释一行尽管dog是Animal类型,但它运行的是Dog类的eat方法。

这是由于编译时,只检查参数的引用类型;运行时指定对象的类型并运行对象的方法 。

方法的重写规则:

1.参数列表和返回类型必须和被重写的相同

2.访问权限不能比父类更低

3.父类的成员方法只能被它的子类重写

4.声明为final方法不能被重写

5.声明为static方法不能被重写,但能够被再次声明

6.子类和父类在同一包中,则子类可以重写所有(除private和final)的方法

7.子类和父类不在同一包中,则子类可以重写声明为public和protected并且非final的方法

8.重写的方法可以抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,

或者比被重写方法声明的更广泛的强制性异常,反之则可以。

9.构造方法不能被重写

10.如果不能继承一个方法,则不能重写这个方法

重载(Overload):

重载是在一个类里面,方法名相同而参数不同。

返回类型可以相同也可以不同。重载方法必须有一个独一无二的参数类型列表。

最常用的就是构造器的重载

重载规则:

1.必须改变参数列表(参数个数或类型或顺序不一样)

2.可以改变返回类型

3.可以改变访问修饰符

4.可以声明新的或更广的检查异常

5.方法能够在同一个类中或者在一个子类中被重载

public class Test{
    public int test(){
        System.out.println("test1");
        return 1;
    }
    public void test(int a){
        System.out.println("test2");    
    }
    public void test(int a,String b){
        System.out.println("test3");
    }
    public void test(String a,int b){
        System.out.println("test4");
    }
    
    public static void main(String[] args){
        Test o = new Test();
        o.test();
        o.test(1);
        o.test(1,"a");
        o.test("a",1);
    }
}
//运行结果:
test1 test2 test3 test4

总结:

重载和重写是java多态性的不同表现,方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

posted @ 2018-03-02 15:33  happy_xiaoxiao  Views(154)  Comments(0Edit  收藏  举报