方法重写

什么是方法重写?

方法重写指的是当子类和父类出现了一摸一样的方法声明

方法重写有什么用?

当父类中有一个方法时,子类会继承,但是子类并不一定能够用到,或者说继承过来的方法不满足使用,需要重新写方法体,但是仅限于方法体的修改。

案例:手机拥有打电话的功能,智能手机拥有视频通话的功能。

class Phone{
    public void call(){
        System.out.println("电话拨通中");
    }
}
class SmartPhone extends Phone{
    
}

public class Application{
    public static void main(String[] args){
        SmartPhone sp=new SmartPhone();
        sp.call();
    }
}
//输出结果
电话拨通中

SmartPhone类中是不含有call的方法的,但是因为其父类Phone含有该方法,所以可以引用call方法;

但是作为智能手机不应该只有call的方法,所以我们要将其从父类中继承过来的方法进行重写来加入新的功能;这就是方法重写的意义所在。

class Phone{
    public void call(){
        System.out.println("电话拨通中");
    }
}
class SmartPhone extends Phone{
    @override  //@override 是具有检测功能的注解,检测下方的方法是否为方法重写
    public void call(){//方法重写必须与父类的返回值类型,方法名,形参一致
        System.out.println("视频通话已开启");//我们加入了新的输出语句
        System.out.println("电话拨通中");//这里我们应该简化语句写出:super.call();
    }
}

public class Application{
    public static void main(String[] args){
        SmartPhone sp=new SmartPhone();
        sp.call();
    }
}
//输出结果
视频通话已开启
电话拨通中

方法重写的注意细节

现在我们已经了解方法重写的意义,方法重写中还有一些细节需要我们注意;

我们发现不管是父类的还是子类方法前面有时候会加上publicprivate等等词语;

我们将加在前面的这些词语称为访问权限修饰符;他们的等级为:public>protected>private

class Phone{
    //在父类中设置一个默认权限的方法(没有加修饰符就代表默认)
    void call(){
        System.out.println("电话拨通中");
    }
}
class SmartPhone extends Phone{
    @override
    //子类重写父类方法时访问权限必须高于或等于父类的访问权限
    void call(){
    //此时可以加的修饰词为:public、protected
        System.out.println("视频通话已开启");
        super.call();
    }
}

public class Application{
    public static void main(String[] args){
        SmartPhone sp=new SmartPhone();
        sp.call();
    }
}

总结:

  • 重写是发生在继承的基础上
  • 重写是针对方法而言的
  • 子类方法重写时,方法的声明一定要与父类的方法声明保持一致
  • 父类的私有方法子类不能继承和进行重写
  • 子类对父类方法进行重写时,访问权限修饰符的等级一定不可小于父类方法的访问权限修饰符等级
  • public>protected>private

原文地址:http://www.cnblogs.com/CQliuwei/p/16921137.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性