JavaSE-面向对象(方法重写)

 更新时间:2021年08月10日 17:30:08   作者:小滨MVP  
子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改。而子类想要修改父类中的方法可以使用方法重写进行操作。

方法重写与之前的方法重载不同

回顾一下方法重载,相同的方法名不同参数类型和参数数量以及参数顺序

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

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • java实现时间控制的几种方案

    java实现时间控制的几种方案

    这篇文章主要介绍了java实现时间控制的几种方案,本文从多个方面给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Spring boot集成easy excel实现导入导出功能

    Spring boot集成easy excel实现导入导出功能

    这篇文章主要介绍了Spring boot集成easy excel实现导入导出操作,使用easyexcel,首先要引入easyexcel的maven依赖,具体的版本根据你的需求去设置,本文结合实例代码讲解的非常详细,需要的朋友可以参考下
    2024-05-05
  • MyBatisPlus中@TableField注解的基本使用

    MyBatisPlus中@TableField注解的基本使用

    这篇文章主要介绍了MyBatisPlus中@TableField注解的基本使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java接口防重提交的处理方法

    java接口防重提交的处理方法

    本文主要介绍了java接口防重提交的处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 一文吃透Spring集成MyBatis

    一文吃透Spring集成MyBatis

    spring能集成很多的框架,是spring一个优势功能,通过集成功能,让开发人员使用其他框架更方便,本文将给大家详细介绍Spring如何集成MyBatis,,需要的朋友可以参考下
    2023-05-05
  • SpringBoot的依赖管理配置

    SpringBoot的依赖管理配置

    一般来讲SpringBoot项目是不需要指定版本,而SSM项目是需要指定版本,SpringBoot的核心依赖就是spring-boot-starter-parent和spring-boot-starter-web两个依赖,关于这两个依赖的相关介绍具体今天小编给大家介绍下
    2022-07-07
  • Kotlin内存陷阱inline使用技巧示例详解

    Kotlin内存陷阱inline使用技巧示例详解

    这篇文章主要为大家介绍了Kotlin内存陷阱inline使用技巧示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • java设计模式笔记之适配器模式

    java设计模式笔记之适配器模式

    这篇文章主要为大家详细介绍了java设计模式之适配器模式笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java利用Phantomjs实现生成图片的功能

    Java利用Phantomjs实现生成图片的功能

    这篇文章主要介绍了Java利用Phantomjs实现生成图片的功能,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Java子类实例化总是默认调用父类的无参构造操作

    Java子类实例化总是默认调用父类的无参构造操作

    这篇文章主要介绍了Java子类实例化总是默认调用父类的无参构造操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论