zoukankan      html  css  js  c++  java
  • 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多态性的不同表现,方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

  • 相关阅读:
    姚明如何理财
    转:韩国“抢文化”与中国的“文化洁癖”
    转:关于IDL程序的发布
    GIS相关网站
    【转】:身为男人应做的十件事情
    转:关于稀少控制点下遥感影像纠正的主要研究成果
    转:E都市创业经历
    转载:OSSIM简介
    市场营销学课程
    C#中判断是否为数字&是否为整除(转)
  • 原文地址:https://www.cnblogs.com/happy-xiaoxiao/p/8486669.html
Copyright © 2011-2022 走看看