zoukankan      html  css  js  c++  java
  • Java overload和override的区别分析

    Java overload和override的区别分析

    方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。 
    如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。 
    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常进行重载. 

    1.方法重载(overload) 
    概念:简单的说:方法重载就是类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数。  
    注意事项: 
    (1)方法名相同 
    (2)方法的参数类型、个数、顺序不至少有一项不同 
    (3)方法返回类型可以不同 
    (4)方法的修饰符可以不同 
    如果只是返回类型不一样,不能够构成重载 
    如果只是控制访问修饰符号不一样,也是不能构成重载的 
    Overloaded的方法是可以改变返回值的类型。 
    2.方法覆盖(override) 
    概念:简单的说:方法覆盖就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的那个方法。 
    注意事项:方法覆盖有很多条件,总的讲有两点一定要注意: 
    (1)子类的方法的返回类型,参数,方法名称,要和父类方法的返回类型,参数,方法名称完全一样,否则编译出错。 
    (2) 子类方法不能缩小父类方法的访问权限(反过来是可以的) 
    例: 
    Overrride实例 

    class A {
        public int getVal() {
            return (5);
        }
    }

    class B extends A {
        public int getVal() {
            return (10);
        }
    }

    class Override {
        public static void main(String[] args) {
            B b = new B();
            A a = (A) b;// 把 b 强 制转换成A的类型
            int x = a.getVal();
            System.out.println(x);
        }
    }
     
     Overload实例
    // ackage com.guonan;
    // Demostrate method voerloading.
    class OverloadDemo {
        void test() {
            System.out.println("NO parameters");
        }

        void test(int a) {
            System.out.println("a:" + a);
        }// end of Overload test for one integer parameter.

        void test(int a, int b) {
            System.out.println("a and b:" + a + " " + b);
        }

        double test(double a) {
            System.out.println("double a:" + a);
            return a * a;
        }
    }

    class Overload {
        public static void main(String[] args) {
            OverloadDemo ob = new OverloadDemo();
            double result;
            ob.test();
            ob.test(10);
            ob.test(10, 20);
            result = ob.test(123.25);
            System.out.println("Result of ob.test(123.25):" + result);
        }
    }
  • 相关阅读:
    chapter 12_1 数据文件
    chapter11_3 字符串缓冲
    chapter11_2 Lua链表与队列
    chapter11_1 Lua数组、列表
    chapter9_4 非抢占式的多线程
    Java设计模式
    java内存回收机制
    javaIO流概述
    java集合概述
    java多线程
  • 原文地址:https://www.cnblogs.com/stublue/p/3668490.html
Copyright © 2011-2022 走看看