重载与重写的区别

重载(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只能有一个,还必须是第一个。

原文地址:https://www.cnblogs.com/anke-z/p/12382239.html