黑马程序员技术交流社区

标题: 重载与覆盖的区别 [打印本页]

作者: RockLee    时间: 2015-7-1 10:05
标题: 重载与覆盖的区别
什么是方法的重载(Overload)?
其概念是:概念:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型或参数顺序不同即可。
存在的原因:
屏蔽了一个对象的同一类方法由于参数不同所造成的差异。
特点:
与返回值类型无关,只看参数列表。

以下是方法重载的示例:
public void a(int a){}
public int a(){}
public void a(int a,String s){}

我的总结是:方法名相同,但是方法的签名不一样。且被重载的方法还可以起作用。

eg:
    class Chongzai
    {
        public static void main(String[] args)
        {
            int ret = name(3,4,5);
            System.out.println(ret);
        }
        public static int name(int a, int b)
        {
            int c = a+b;
            return c;
        }
        public static int name(int a, int b, int m)//这就叫做方法的重载,只要参数列表不一样。好处:用户使用时限制很小;
        {
            int c = a+b+m;
            return c;
        }
    }
覆盖的含义:
方法覆写产生原因:
当父类中某个方法不适合于子类时,子类出现父类一模一样的方法.
判断必杀技:子类方法前加上@Override能编译通过,表明是方法的覆写。
调用被覆盖的父类方法:使用super.方法名(实参);
方法覆写时应遵循的原则(一同两小一大):
(一同):方法签名必须相同;
(两小):
子类方法的返回值类型比父类方法的返回值类型更小或相等
子类方法声明抛出的异常应比父类方法申明抛出的异常更小或相等;
(一大):子类方法的访问权限应比父类方法更大或相等;

子类需要覆写父类方法。
当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。

我的总结是:覆盖的方法签名是一样的,且被覆盖的方法一般不起作用。

eg
package test;

    class Dog{
        void eat(){
            System.out.println("一般的狗吃一般的狗粮!");
        }
    }

    class HashDog extends Dog{
        void eat(){
            System.out.println("哈士奇吃哈士奇的狗粮!");
        }
    }

    class ZangAoDog extends Dog{
        void eat(){
            System.out.println("藏獒吃藏獒的狗粮!");
        }
    }
public static void main (String [ ]  args){
                new ZangAoDog.eat();
}
作者: RockLee    时间: 2015-7-1 10:23
写的好:lol
作者: 凶狠搞Android    时间: 2015-7-1 11:00
总结得很到位
作者: dillinger    时间: 2015-7-1 11:36
谢谢楼主分享~
作者: 汪磊の    时间: 2015-7-1 11:37
学习学习!!
作者: ZhangHeng    时间: 2015-7-1 12:52
总结的很好,学到了
作者: 虾米吃螃蟹    时间: 2015-7-1 13:35
不错,加油~
作者: zlpiano    时间: 2015-7-1 14:37
总结得不错,复习一下
作者: 走在这里    时间: 2015-7-1 22:15
赞一个  谢谢
作者: 王冲6060    时间: 2015-7-1 22:20
感谢分享!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2