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

  • 相关阅读:
    NSCache
    编译器 perforSelecter时 警告去除
    常用git命令
    LINUX系统自动化部署shell脚本
    个人工作总结10
    个人工作总结09
    个人工作总结-8
    个人工作总结07
    第八周学习进度
    对搜狗输入法的一些评价
  • 原文地址:https://www.cnblogs.com/happy-xiaoxiao/p/8486669.html
Copyright © 2011-2022 走看看