zoukankan      html  css  js  c++  java
  • 重载与重写的区别

    重载(overload):方法名称一样,参数列表【不一样】。

    如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写(override)
    概念:
    子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。
    声明不变,重新实现
    特点:
    创建的是子类对象,则优先用子类方法。
    重写(override):方法的名称一样,参数列表【也一样】。也叫覆盖、复写

    注意事项

    1. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样

      @override:写在方法前面,用来检测是不是有效的正确覆盖重写

      这个注释就算不写,只要满足要求,也是正确的覆盖重写

    2. 子方法的返回值必须【小于等于】父方法的返回值范围。

      小扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是object的子类

    3. 子类方法的权限必须【大于等于】父类方法的权限修饰符

    4. 小扩展提示:public > protected > (defoult) 什么都不写>private

      备注:(default)不是关键字default,而是什么都不写,留空。

    /*
    重写(override):方法的名称一样,参数列表【也一样】。也叫覆盖、复写
    */
    public class Fu{
        public void method(){
            System.out.println("Fu show");
        }
    }
    
    public class Zi extends Fu{
         public void method(){
            System.out.println("Zi show");
        }
    }
    
    public static void main(String[] args){
        Zi zi = new Zi();
        zi.method();//zi show
    }
    
    /*
    重载(overload):方法名称一样,参数列表【不一样】。
    */
    public void bark(){
        System.out.println("woof");
    }
    public void bark(int num){
        for(int i = 0;i<num;i++){
            System.out.println("woof");
        }
    }
    

    小结:
    重写(override):方法名参数都一样。
    重载(overload):方法名相同,参数不同。

    设计原则:

    对于已经投入使用的类,尽量不要进行修改。推荐定义一个新的类,来重复利用其中的共性内容,并且添加改动新内容

    子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从 而进行扩展增强。比如新的手机增加来电显示头像的功能

    代码如下:

    //父类
    class Phone{
        public void call(){
            System.out.println("打电话");
        }
        public void send(){
            System.out.println("发短信");
        }
        public void show(){
            System.out.println("现实号码");
        }
    }
    //子类
    class NewPhone{
        @Override
        public void show(){
            super.show();
            System.out.println("显示号码");
            System.out.println("显示头像");
        }
    }
    //测试类
    public static void main(String[] args){
        Phone phone = new Phone();
        phone.call();//打电话
        phone.send();//发短信
        phone.show();//显示号码
        
        NewPhone newphone = new NewPhone();
        newphone.call();//打电话
        newphone.send();//发短信
        newphone.show();//显示号码  显示号码  显示头像
        
    }
    
    

    访问特点:

    继承关系中,父子构造方法的访问特点

    1. 子类构造方法中有一个默认隐含的“super();”方法调用,所有一定是先调用的父类构造,然后执行子类的构造。

    2. 子类构造可以通过super关键字来调用父类重载结构。

    3. super的父类构造调用,必须是子类构造方法的第一个语句。

      不能一个子类构造调用多次super构造。

    总结:

    子类必须调用父类构造方法,不写则赠送super();写了则用指定的super调用,super只能有一个,还必须是第一个。

  • 相关阅读:
    Highcharts之饼图
    设计模式学习之原型模式
    jQuery学习之结构解析
    JS学习之闭包的理解
    JS学习之prototype属性
    JS学习之事件冒泡
    Mybatis学习之JDBC缺陷
    Spring学习之Aop的基本概念
    Struts学习之值栈的理解
    Struts学习之自定义结果集
  • 原文地址:https://www.cnblogs.com/anke-z/p/12382239.html
Copyright © 2011-2022 走看看