java基础十二-方法覆盖(方法重写)

2023-05-16

方法覆盖

    • 1.什么条件构成方法重载?
    • 2.方法覆盖的注意事项
    • 3.方法覆盖的经典案例
    • 4.覆盖toString方法

1.什么条件构成方法重载?

OverrideTest02.java

/*
	什么时候我们会考虑使用方法覆盖呢?
		子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,
		子类有权利对这个方法进行重新编写,有必要进行"方法的覆盖"

		方法的覆盖又叫做:方法重写,英语单词叫做:Override、Overwrite,都可以。
		比较常见的:方法覆盖、方法重写、override

		回顾一下方法重载!!!!
		什么时候考虑使用方法重载overload?
			当在一个类当中,如果功能相似的话,建议将名字定义的一样,这样代码美观,并且方便编程
			什么条件满足之后能够构成方法重载overload?
			条件一:在同一个类当中
			条件二:方法名相同
			条件三:参数列表不同(个数、顺序、类型)

		重要结论:
			当子类对父类继承过来的方法进行"方法覆盖"之后,
			子类对象调用该方法的时候,一定执行覆盖之后的方法

		当我们代码怎么编写的时候,在代码编写级别构成方法重写?
			条件一:两个类必须要有继承关系
			条件二:重写之后的方法和之前的方法具有:
					相同的返回值类型
					相同的方法名
					相同的形式参数列表
			条件三:访问权限不能更低,可以更高(这个可以先记住)
					父类原先是public,不能低于public
					父类原先是protected,子类可以是public
			条件四:重写之后的方法不能比之前的方法抛出更多的异常,可以更少.(这个先记住)
			父类子类没有异常,父类抛出异常,程序正常运行
			父类子类没有异常,子类抛出异常,程序报错:
	
*/

public class OverrideTest02{
	public static void main(String[] args){
		//创建鸟对象
		Bird b = new Bird();
		//让鸟儿移动
		b.move();//鸟儿在飞翔!!!
		b.sing(1000);//Animal sing...

		Cat c = new Cat();
		c.move();//猫在走猫步!!!
	};
}

class Animal{
	public void move(){
		System.out.println("动物在移动!");
	}

	public void sing(int i){
		System.out.println("Animal sing...");
	}
}

class Bird extends Animal{
	//对move方法进行覆盖,方法重写,override
	//最好将父类中的方法原封不动的复制过来(不建议手动编写)
	// 方法覆盖就是给继承过来的方法给覆盖了
	public void move(){
		System.out.println("鸟儿在飞翔!!!");
	}

	public void sing(){
		System.out.println("Animal sing...");
	}
}

class Cat extends Animal{
	public void move(){
		System.out.println("猫在走猫步!!!");
	}
}

2.方法覆盖的注意事项

  • 注意1:方法覆盖只是针对于方法,和属性无关
  • 注意2:私有方法无法覆盖
  • 注意3:构造方法不能被继承,所以构造方法也不能被覆盖.
  • 注意4:方法覆盖只是针对于实例方法,静态方法覆盖没有意义.

这几个注意事项学习完多态之后就明白了

3.方法覆盖的经典案例

OverrideTest03.java

//方法覆盖比较经典的案例
//一定要注意:方法覆盖/重写的时候,建议将父类的方法复制粘贴,这样比较保险

						
public class OverrideTest03{
	public static void main(String[] args){
		//创建中国人对象
		// Chinese p1 = new Chinese("张三");//错误原因:没有这样的构造方法
		Chinese p1 = new Chinese();
		p1.setName("张三");
		p1.speak();//张三正在说汉语

		//创建美国人对象
		// American p2 = new American("jack");//错误原因:没有这样的构造方法
		American p2 = new American();
		p2.setName("jack");
		p2.speak();//jack speak english!
	}
}


class People{
	//属性
	private String name;
	//构造
	public People(){}
	public People(String name){
		this.name = name;
	}
	//setter and getter
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	//人都会说话
	public void speak(){
		System.out.println(name + "....");
	}
}

//中国人
class Chinese extends People{
	//中国人说汉语
	//所以子类需要对父类的speak()方法进行重写
	public void speak(){
		System.out.println(this.getName() + "正在说汉语");
	}
}

//美国人
class American extends People{
	//美国人说英语
	//所以子类需要对父类的speak()方法进行重写
	public void speak(){
		System.out.println(this.getName() + "speak english!");
	}
}

在这里插入图片描述
//子类中调用的方法Speak首字母误写成大写,则会调用父类的speak方法,导致输出结果为:在这里插入图片描述

4.覆盖toString方法

/*
	关于Object类中的toString()方法
		1.toString()方法的作用是什么?
			作用:将"java对象"转换成"字符串的形式".
		2.Object类中toString()方法的默认实现是什么?
		 	public String toString(){
				return getClass().getName()+ "@" + Integer.toHexString(hasCode());
		 	}
		 	toString方法名的意思是转换成String
		 	含义:调用一个java对象的toString()方法就可以将该java对象转换成字符串的表示
	 	3.那么toString()方法给的默认实现够用吗?
*/

public class OverrideTest04{
	public static void main(String[] args){
		//创建一个日期对象
		MyDate t1 = new MyDate();
		//调用toString()方法(将对象转换成字符串形式)
		//问:你对这个输出结果满意吗??????不满意,希望输出XXX年XX月XX日
		//System.out.println(t1.toString());//MyDate@1db9742

		//重写MyDate的toString()方法之后的结果
		System.out.println(t1.toString());

		// 大家是否还记得,当输出一个引用的时候,println方法会自动调用的toSring方法
		System.out.println(t1);

		MyDate t2 = new MyDate(2008,8,8);
		System.out.println(t2);//2008年8月8日


		//创建学生对象
		Student s = new Student(1111,"zhangsan");
		//重写toString()方法之前
		System.out.println(s);//


	}
}

//日期类
class MyDate{
	private int year;
	private int month;
	private int day;
	public MyDate(){
		this(1970,1,1);
	}
	public MyDate(int year,int month,int day){
		this.year = year;
		this.month = month;
		this.day = day;
	}
	public void setYear(int year){
		this.year = year;
	}
	public int getYear(){
		return year;
	}
	public void setMonth(int Month){
		this.month = month;
	}
	public int getMonth(){
		return month;
	}
	public void setDay(){
		this.day = day;
	}
	public int getDay(){
		return day;
	}

	//从Object类中继承过来的那个toString()方法已经无法满足我的业务需求了
	//我在子类MyDate中有必要对父类的toString()方法进行覆盖/重写
	//我的业务要求是:调用toString()方法进行字符串转化的时候,
	//希望的结果是XXXX年XX月XX日,这种格式
	//重写一定要复制粘贴,不要手动编写,会错的
	public String toString(){
		return year + "年" + month + "月" +day + "日";
	}
}


class Student{
	int no;
	public Student (int no,String name){
		this.no = no;
		this.name = name;
	}
	// 重写 方法覆盖
	public String toString(){
		return "学号:" + no + ",姓名:" +name;
	}
}

打印结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java基础十二-方法覆盖(方法重写) 的相关文章

  • openwrt下安装lighttpd/webdav模块及改变安装目录

    Openwrt下安装lighttpd及Webdav模块 安装lightttpd 1 opkg update 2 opkg install lighttpd 依赖libxml库 3 修改 etc lighttpd lighttpd conf
  • Game of the Rows CodeForces - 839B

    Daenerys Targaryen has an army consisting of k groups of soldiers the i th group contains ai soldiers She wants to bring
  • ccf 交通规划

    201609 4试题名称 xff1a 交通规划时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 G国国王来中国参观后 xff0c 被中国的高速铁路深深的震撼 xff0c 决定为自己的国家也建设
  • ccf 游戏

    试题编号 xff1a 201604 4试题名称 xff1a 游戏时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 小明在玩一个电脑游戏 xff0c 游戏在一个 n m的方格图上进行 xff0c
  • POJ 1738

    There is an old stone game At the beginning of the game the player picks n 1 lt 61 n lt 61 50000 piles of stones in a li
  • 电池充电电路(TP4059)详解

    电池充电电路 xff08 TP4059 xff09 详解 TP4059是一款完整的单节锂离子电池充电器 xff0c 带电池正负极反接保护反接功能 xff0c 支持高达600mA的充电电流 xff0c 更稳定的电流一致性 该芯片的充电电流可以
  • 洛谷刷题记录【入门1】顺序结构

    入门1 顺序结构 题单 洛谷 https www luogu com cn training 100 problems 1 A 43 B Problem 洛谷 输入两个整数 a b xff0c 输出它们的和 xff08 a b 10 xff
  • 安装CLOVER引导器到硬盘EFI分区

    彻底脱离CLOVER引导U盘 目录 xff1a 1使用EFI TOOLS Clover 安装CLOVER引导器到EFI分区 2使用Clover v2 3k rXXXX pkg 安装CLOVER引导器到EFI分区 前言 我们的电脑里已经安装好
  • 安装配置IIS+MySQL+PHP环境的详细教程(之篇二PHP安装)

    上一篇参考安装配置IIS 43 MySQL 43 PHP环境的详细教程之篇一IIS安装 安装配置IIS 43 MySQL 43 PHP环境的详细教程 xff08 之篇二PHP安装 xff09 在Windows 云服务器中进行 PHP 配置
  • sublime text 4 license

    sublime text 4 注册license 亲测可用 BEGIN LICENSE Mifeng User Single User License EA7E span class token operator span span cla
  • 1.3 生成器 Builder

    专业描述 生成器模式是一种创建型设计模式 xff0c 使你能够分步骤创建复杂对象 该模式允许你使用相同的创建代码生成不同类型和形式的对象 生成器模式结构 生成器 xff08 Builder xff09 接口声明在所有类型生成器中通用的产品构
  • 全网最全Flutter的学习文档,不可转载

    title Flutter全网最全学习笔记 xff01 Flutter学习文档 Author xff1a Brath 欢迎来到 brath 的 CSDN 博客 xff0c 你也可访问 brath top 到我的个人博客来进行观看 演示dem
  • idea启动SpringBoot程序后,出现Process finished with exit code 0并不能成功运行

    前言 最近在学习SpringBoot xff0c 把视屏看了一遍 xff0c 就心血来潮想先测试下 xff1b 然后在IDEA中新建SpringBoot项目 xff08 maven xff09 xff0c 然后就写个标准的hello Spr
  • mysql 定时删除过期数据记录

    首先连接mysql数据库 xff1a 1 查看MySQL事件功能开启 show variables like span class token string 39 sc 39 span span class token punctuatio
  • springboot多数据源使用canal同步master数据库

    canal数据库同步 canal源码 xff08 需要根据自己配置修改参数 xff09 准备 0 xff1a binlog文件 0 1 xff1a binlog文件包含两种类型 xff1a 索引文件 xff08 文件名后缀为 index x
  • nginx映射域名以及加证书https(SSL证书)

    1 映射一个域名到服务器80端口 2 在服务器nginx配置这个域名并重启 nginx conf默认配置 user root span class token punctuation span worker processes auto s
  • 严重 [RMI TCP Connection(3)-127.0.0.1]

    遇到这个问题网上搜了半天发现还是没解决 xff0c 最后发现是maven库的问题 1 这个问题一般是maven库的原因 xff0c 自己下载配置Repository仓库 xff0c 也可以使用IDEA自动下载一个库 下面我是使用IDEA下载
  • MySQL数据库删除数据(有外键约束)

    在MySQL中删除一张表或一条数据的时候 xff0c 出现有外键约束的问题 xff0c 于是就去查了下方法 xff1a span class hljs operator span class hljs keyword SELECT span
  • IDEA 第一次配置Tomcat找不到Tomcat server

    新装的一个电脑 xff0c 配置tomcat时候找不到tomcat server xff0c 这次做个记录 关闭项目 gt setting gt plugins gt 搜索tomcat安装 再次打开就可以看到了 如果还没有就应该是下面的情况
  • java.lang.NumberFormatException: null原因

    今天跑从公司SVN download下来的项目 xff0c 老实报java lang NumberFormatException null这个错 xff0c 页面还提示我系统异常 xff0c 从网上百度看的很多解决方案说是下面这些情况 xf

随机推荐

  • linux内核睡眠状态解析(转载)

    1 系统睡眠状态 睡眠状态是整个系统的全局低功耗状态 xff0c 在这种状态下 xff0c 用户空间的代码不能被执行并且整个系统的活动明显被降低 1 1 被支持的睡眠状态 取决于所运行平台的能力和配置选项 xff0c Linux内核能支持四
  • 记一次Debian11安装

    出现问题 安装成功之后无法启动 从官网上下载镜像之后 xff08 有网络镜像和完整镜像 xff09 xff0c 就是一步步下一步 xff0c 当时提醒我缺少固件 xff0c 我也没有注意 xff0c 以为会联网自动安装 xff0c 当时选择
  • 再谈 UITableView 的 estimatedRowHeight(转)好文章

    转载自 xff1a https kangzubin com uitableview estimatedrowheight 今天发现之前写的一个基于 UITableView 的列表页面存在如下问题 xff1a 当列表在滑动过程中 xff0c
  • Windows访问Ubuntu的两种方法

    两种访问方法都是基于SSH实现的 xff0c 相比于samba只能在同一局域网访问的限制 xff0c 提高工作访问的效率 使用前提 Ubuntu 系统安装了ssh客户端 1 xff1a 将远程Ubuntu文件系统映射到本地磁盘 xff0c
  • 转账设计测试用例-----必背

    功能测试 1 付款账户无余额 xff0c 发起转账 2 付款账户输入框输入特殊字符发起转账 3 付款账户输入框输入空值 xff0c 发起转账 4 付款账户输入0元 xff0c 发起转账 5 付款账户输入大于0且小于余额 xff0c 发起账号
  • 微信朋友圈点赞设计测试用例

    功能测试 发朋友圈本人 已点赞好友 发赞朋友圈的好友且已点赞的好友的共同好友 非发赞朋友圈的好友但是已点赞好友的好友 不通知 发赞朋友圈的好友但是非已点赞好友 通知 1 本人能否进行正常点赞 好友能否点赞 朋友圈开放非好友能否点赞 2 点赞
  • appium + webdriver + HTML 经常遇到的问题

    目录 问题1 xff1a Mac和iOS通信 进行自动化测试参考Desired Capabilities官方说明文档 问题2 xff1a driver 61 webdriver Remote http localhost 4723 wd h
  • 网络安全基础知识&中间件简单介绍

    web服务器产品 apache httpd tomcat iis lighttp nginx xff1a 不是用来web服务器 xff0c 而是用来做反向代理 xff08 tps10w xff0c 优化tqs2020w xff09 fast
  • 连接数据库的方法和方式

    前景说明 xff1a 在我们刚开始使用数据库的时候 xff0c 发现只能在mysql编辑器里面使用sql语句来完成对数据库的操作 xff0c 那我们怎么来通过Java来操控数据库呢 xff1f 这个时候就有了JDBC的出现 1 什么是JDB
  • 域(Domain)

    1 Domain 2 内网环境 工作组 xff1a 默认模式 xff0c 人人平等 xff0c 不方便管理 域 xff0c 人人不平等 xff0c 集中管理 xff0c 同一管理 3 xff1a 集中 统一管理 4 域的特点域组成 控制器D
  • 测试代码PostUrl,字典报空指针异常错误

    package TestExp import org apache http HttpEntity import org apache http client methods CloseableHttpResponse import org
  • Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码

    目录 适用于windows安装MySQL 对于出现拒绝访问root用户的解决方案 解决方案 xff1a 重启MySQL服务器 以上仍然不行的话 1 卸载计算机上所有与MYSQL相关应用程序 2 删除MYSQL所有配置文件 3 然后安装或者进
  • Java环境配置正确,但是java、javac、java -version均返回“不是内部或外部命令,也不是可运行的程序或批处理文件”?

    微信公众号 xff1a AIMIN2020 前言 大多数人刚接触Java的时候都会经常看到JDK JRE JVM xff0c 但可能一直迷迷糊糊 xff0c 不知道它们之间真正的作用和含义 xff0c 而了解JDK JRE JVM分别是什么
  • 来此加密证书申请,验证,自动部署

    之前用certbot 后来一直不报错 证书不管用 就想着干脆直接使用来此加密 不要中间商了 就有了直接到来此加密注册之旅 注册地址 来此加密 https letsencrypt osfipin com user 0408 order lis
  • ubuntu16.04版本查看磁盘信息

    一 查看磁盘信息 dev vda1 总容量50GB xff0c 已使用34GB xff0c 可用13GB无法查看到数据盘说明数据盘未挂载成功 二 挂载数据盘 xff0c 到根目录下 挂载失败原因 xff1a 没有格式化数据盘 使用cat e
  • 理解CNN旋转平移不变性

    理解CNN旋转平移不变性 这种不变性是 很弱的 xff0c 因为它基本只来于pooling操作 xff0c pooling操作在领域内即便旋转了 xff0c 值也有可能不发生变化 这种不变性是 很弱的 xff0c 因为它基本只来于pooli
  • 关于chromedriver executable needs to be in path 问题

    刚刚开始学习Python爬虫 xff0c 在 Python 下引用 Selenium 包开发时 xff0c WebDriver甩出了一个错误消息然后就中断了 xff0c 错误消息 xff1a WebDriverException 39 ch
  • ImportError: dlopen: cannot load any more object with static TLS It seems that scikit-image has not

    目录 错误代码如下解决方法 错误代码如下 ImportError dlopen cannot load any more object with static TLS It seems that scikit image has not b
  • Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-

    单向数据流 prop 是单向绑定的 xff1a 当父组件的属性变化时 xff0c 将传导给子组件 xff0c 但是不会反过来 这是为了防止子组件无意修改了父组件的状态 这会让应用的数据流难以理解 另外 xff0c 每次父组件更新时 xff0
  • java基础十二-方法覆盖(方法重写)

    方法覆盖 1 什么条件构成方法重载 2 方法覆盖的注意事项3 方法覆盖的经典案例4 覆盖toString方法 1 什么条件构成方法重载 OverrideTest02 java 什么时候我们会考虑使用方法覆盖呢 子类继承父类之后 当继承过来的