JavaSE-面向对象(方法重写)
作者:小滨MVP 发布时间:2023-01-27 10:51:09
方法重写与之前的方法重载不同
回顾一下方法重载,相同的方法名不同参数类型和参数数量以及参数顺序
package Demo1;
import java.util.Arrays;
public class Demo011 {
public static void main(String[] args) {
Demo011 D11=new Demo011();
D11.demo(12,232,43,3);//4个实际参数,则调用第三个demo方法
}
public void demo(int a,int b){
System.out.println(a+b);
}
public void demo(int a,int b,int c){
System.out.println(a+b+c);
}
public void demo(int...ints){
System.out.println(Arrays.toString(ints));
}
}
方法重写
重写都是方法的重写与属性无关
package Demo1;
public class Demo012 {
public static void main(String[] args) {
B b =new B();
b.demo();
}
}
class A{
public static void demo(){
System.out.println("Ademo");
}
}
class B extends A{
public static void demo(){
System.out.println("Bdemo");
}
}
执行结果:
Bdemo
父类的引用指向子类进行引用
public static void main(String[] args) {
//方法的调用只和数据类型有关
B b =new B();//调用的是B类的静态方法
b.demo();
//父类的引用指向子类
A a = new A();//调用的是A类的静态方法
a.demo();
}
执行结果:
Bdemo
Ademo
使用快捷键Alt+insert快速生成重写方法
Override重写方法
class A{
public void demo(){
System.out.println("Ademo");
}
}
class B extends A{
@Override//注解,有功能的注释
public void demo() {
super.demo();//默认调用父类的demo()方法
}
}
使用Override重写默认是调用父类的方法,我们可以在重写方法中调用自己的方法
class A{
public void demo(){
System.out.println("Ademo");
}
}
class B extends A{
@Override
public void demo() {
//super.demo(); 默认调用父类的demo()方法输出Ademo
System.out.println("Bdemo");
}
}
重写之后执行结果:
Bdemo
Bdemo
子类重写父类的demo()方法之后输出为demoB,但是并不是子类重写之后将父类的方法修改了,子类在进行调用的时候调用的是重写后父类的方法
package Demo3;
public class demo005 {
public static void main(String[] args) {
DemoB DB =new DemoB();
DB.demo();//调用子类的demo
DemoA DA=new DemoA();//调用父类的demo
DA.demo();
}
}
class DemoA{
public void demo(){
System.out.println("demoA");
}
}
class DemoB extends DemoA{//继承
@Override
public void demo(){
System.out.println("demoB");
}
}
执行结果:
demoB
demoA
但是我可以完全不继承父类也能输出demoB,demoA
package Demo3;
public class demo005 {
public static void main(String[] args) {
DemoB DB =new DemoB();
DB.demo();
DemoA DA=new DemoA();
DA.demo();
}
}
class DemoA{
public void demo(){
System.out.println("demoA");
}
}
class DemoB{//A与B没有继承关系
public void demo(){
System.out.println("demoB");
}
}
执行结果:
demoB
demoA
两种方式有什么区别呢?
子类继承父类重写方法,是通过子类调用父类的方法进行重写的,子类执行结果也是重写后的方法,但并不是子类把父类的方法修改了
方式二是在两个不同类下创建demo()方法,通过对象进行调用。
父类方法若添加static修饰符则重写失败提示错误
进行方法重写时静态方法和非静态方法的区别很大,如果是加了static静态方法,调用结果之和左边定义的类有关。方法重写与非静态方法有关
私有方法无法进行方法重写,重写的关键词只能是public不能是private私有的
重写小结:
方法重写需要有继承关系,子类重写父类的方法
子类方法与父类的方法方法名和修饰符必须相同
以及方法的参数列表必须相同,不相同则为方法重载
修饰符范围可以扩大但是不能缩小,private(小)–>proteated–>default–>public(大)
重写可能会抛出异常,异常范围可以被缩小但不能扩大
为什么需要重写?
父类的功能子类不一定需要或者不一定满足,父类的东西太多了子类可能只需要一点
快捷键Alt+insert
快速创建Override
来源:https://blog.csdn.net/xuzhibin666/article/details/119487908


猜你喜欢
- 前言OpenTelemetry作为一个分布式追踪的项目,他支持非常多的语言,如Java,Golang,Python等,鉴于笔者的主力语言为J
- 该篇文章篇幅很长,大概的思路如下 maven的介绍,初步
- 一、常见非托管资源Windows窗口句柄、数据库链接、GDI对象、独占文件锁等等对象ApplicationContext,Brush,Com
- 要理解实现原理,必须把线程池的几个参数彻底搞懂,不要死记硬背一、线程池参数1、corePoolSize(必填):核心线程数。2、maximu
- 一.小伙伴们在做钱包支付中,相信会有个绕不过去的输入支付密码页面。下面小编给个效果图:898342572738938468.png实现的原理
- 把bitmap图片的某一部分的颜色改成其他颜色private Bitmap ChangeBitmap(Bitmap bitmap){ int
- 1. 前言对于写Crud的老司机来说时间非常宝贵,一些样板代码写不但费时费力,而且枯燥无味。经常有小伙伴问我,胖哥你怎么天天那么有时间去搞新
- Springboot导出文件,前端下载文件后端代码可以把请求设置为post,我这里是Get @RequestMapping(value =
- 目录1.下面有关JSP内置对象的描述,说法错误的是?2.Java语言与其它语言相比,独有的特点是( )3.下面哪个选项正确创建socket连
- Android的一个核心特性就是一个应用程序可作为其他应用程序中的元素,可为其他应用程序提供数据。例如,如果程序需要用某些控件来加载一些图片
- 前言这段时间在学习Spring,依赖注入DI和面向切面编程AOP是Spring框架最核心的部分。这次主要是总结依赖注入的bean的装配方式。
- 一:深入解析JSTL标签库 1、什么是JSTL标签库①Java Standard Tag Lib(Java标准的标签库)。②JST
- 我最近在研究Spring框架的路上,那么今天也算个学习笔记吧!学习一下如何实现Bean的装配方法Bean的简介Java开发者一般会听过Jav
- 本文实例讲述了Android简单实现启动画面的方法。分享给大家供大家参考,具体如下:核心代码:package com.demo.app;im
- 目录 - JWT- JWT与其它的区别OAuthCookie/Session Auth- JWT的优点- 认证- JWT的缺点-
- 环境:VS2019+Qt5.121. CLR库安装 &nb
- 最近在开发中遇到了这样一个问题,在下拉刷新组件中包含了一个轮播图组件,当左右滑动的图片时很容易触发下拉刷新,如下图所示:如图中红色箭头所示方
- 在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相
- 本篇主要是自定义动画与Animatable。AnimationSpec上一篇中,出现了多次animationSpec属性,它是用来自定义动画
- 话不多说,请看代码/// <summary>/// 判断字符串是否是数字/// </summary>public s