首页 > 编程语言 >Java多态----重写

Java多态----重写

时间:2024-07-30 23:53:00浏览次数:14  
标签:Java name money 多态 ---- 子类 父类 public String

一、重写与重载

        在学习重写之前,我们需要将它和重载进行区分:

方法的重载,发生在同一个类中,方法名相同,参数列表不同,返回值无关。

可参考上一篇文章中一个类中不同的构造方法,其也属于重载。详情可见于Java多态----继承-CSDN博客

------------------------------------------------------------------------------------------------------------------------------
而方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要

大于或等于父类的访问修饰符,子类的异常声明必须小于或等于父类的异常声明。如果方法被

private,static,final修饰,那么不能被重写。

总的来说,当你需要对重载和重写进行区分时,直接查看它们是否在同一个类即可。

二、概念

        重写是指子类建立了一个和父类具有相同名称、参数列表和返回类型的方法。

重写的好处在于子类可以根据自身需求去实现具体内容。

三、代码实现

        举一个生动形象的例子:父亲有三个孩子,我们就称他们为A,B,C。父亲告诉孩子们,让孩子们去买自己喜欢的零食,但给他们的零花钱都是一样的;此时我们可以得知

孩子们都有同样的属性:名字、零花钱以及相同的方法:购买喜欢的食物

此时我们当然可以分别在三个孩子类中重新定义这些成员,但是费时费力,更重要的是,这不符合子、父类之间的逻辑关系。

从题目中应该了解到,姓名、零花钱这两个属性应该继承父亲中的属性(设为name,money),购买零食的方法也应该继承父类中的方法(设为buy()方法),这样一来三个孩子只需要根据自身需求来重写父类方法或定义父类继承来的属性。

class Father{
    private String name;
    private int money;//money、name为子类共有属性
    public Father(){
        this.name = "";
        this.money = 0;
    }
    public Father(String name, int money){
        this.name = name;
        this.money = money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
    public void buy(){//该方法可以体现出子类的多态性
        System.out.print(name+"用"+money+"买了");
    }

}
class SonA extends Father{//此处由于篇幅原因仅以SonA展示,大家可以自己尝试SonB、SonC
    public SonA(){
        super();
    }
    public SonA(String name, int money){
        super(name, money);
    }
    public void setMoney(int money){
        super.setMoney(money);
    }
    public int getMoney(){
        return super.getMoney();
    }
    public void setName(String name){
        super.setName(name);
    }
    public String getName(){
        return super.getName();
    }
    public void buy(){
        super.buy();
        System.out.println("薯片");
    }
}
public class Main {
    public static void main(String[] args) {
        SonA sona = new SonA("小明",200);//此时外界传给子类构造方法,子类又交给父类
        //所以实际上我们仍在使用父类的属性,但是对象不同其中的值夜自然不同
        sona.buy();//输出展示结果
    }
}

输出结果为:小明用200买了薯片

标签:Java,name,money,多态,----,子类,父类,public,String
From: https://blog.csdn.net/weixin_74787572/article/details/140783138

相关文章

  • [vue3] Vue3源码阅读笔记 reactivity - collectionHandlers
    源码位置:https://github.com/vuejs/core/blob/main/packages/reactivity/src/collectionHandlers.ts这个文件主要用于处理Set、Map、WeakSet、WeakMap类型的拦截。拦截是为了什么?为什么要处理这些方法?Vue3实现响应式的思路是使用ProxyAPI在getter中收集依赖,在setter触发更新......
  • ysyx:测试永远不够
    尽管指令匹配的部分早就已经完成,但这并不代表代码方面就不会再检测出漏洞。cpu-test这个测试集文件夹里面的测试代码只是覆盖了一部分内容,即使是全部通过,你的代码也仍有可能是错误的。当我在处理其他内容时,突然间nemu就卡在了代码某处提示地址错误。重新打开difftest,定位......
  • Spring源码(八)--Spring实例化的策略
    Spring实例化的策略有几种,可以看一下InstantiationStrategy相关的类。UML结构图InstantiationStrategy的实现类有SimpleInstantiationStrategy。CglibSubclassingInstantiationStrategy又继承了SimpleInstantiationStrategy。InstantiationStrategyInstantiationStrat......
  • POSIX-shell学习笔记
    学习POSIXshell建议使用dash,因为它很快:https://unix.stackexchange.com/a/148098mandash:OnlyfeaturesdesignatedbyPOSIX,plusafewBerkeleyextensions,arebeingincorporatedintothisshell.条件判断mandash,然后搜索testexpression,可以看到完整的列表。ife......
  • 关于new、delete函数的错误处理(std::nothrow)
    new、delete函数源码注释如下:无参数无参数的new、delete函数,如果调用失败,会抛出bad_alloc异常,需要使用try{}catch(){}语句捕获异常从而进行异常处理。#include<iostream>intmain(){try{while(1){int*p=newint[100000000ul];......
  • Laconic Private Set-Intersection From Pairings (2022)
    LaconicPrivateSet-IntersectionFromPairings(2022)论文地址:https://eprint.iacr.org/2022/529.pdf代码地址:https://github.com/relic-toolkit/relic/tree/main/demo/psi-client-server代码运行参考:RELIC库学习Laconic算法介绍Laconic适用于算力和存储受限的客户端......
  • docker换国内镜像源-Docker安装 Nginx测试-Docker部署Gitblit服务器
    docker换国内镜像源,docker换源echo>/etc/docker/daemon.jsoncat>/etc/docker/daemon.json<<END{  "registry-mirrors":[    "https://hub-mirror.c.163.com",    "https://ustc-edu-cn.mirror.aliyuncs.com",    "https:/......
  • 全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规
    全网最适合入门的面向对象编程教程:28类和对象的Python实现-Python编程原则、哲学和规范大汇总摘要:本文主要介绍了在使用Python进行面向对象编程时,Python异常处理的原则-“请求谅解,而非许可”,以及软件设计和Python的编程原则,同时介绍了PEP8规范。原文链接:FreakStud......
  • 了解GraphRAG
    了解GraphRAG转载:从零实现大模型-GraphRAG,构建LLM中的关系数据库开源地址:https://github.com/microsoft/graphrag论文:FromLocaltoGlobal:AGraphRAGApproachtoQuery-FocusedSummarization博客介绍:https://microsoft.github.io/graphrag/传统RAGLLM预训练和......
  • [vue3] Vue3源码阅读笔记 reactivity - collectionHandlers
    源码位置:https://github.com/vuejs/core/blob/main/packages/reactivity/src/collectionHandlers.ts这个文件主要用于处理Set、Map、WeakSet、WeakMap类型的拦截。拦截是为了什么?为什么要处理这些方法?Vue3实现响应式的思路是使用ProxyAPI在getter中收集依赖,在setter触发更新......