首页 > 编程语言 >Java方法重写

Java方法重写

时间:2023-02-02 22:00:28浏览次数:60  
标签:run 覆盖 方法 Vehicle Java 重写 class

如果子类中具有与父类中声明相同的方法,在java中称为方法覆盖。换句话说,如果子类提供了由其父类提供的其中一个方法的特定实现,则它被称为方法覆盖。所以方法覆盖有两个前提条件:继承和子父类中方法名称相同。

Java方法覆盖的用法

  • 方法重写用于提供有别于超类提供的方法的特定实现。
  • 方法重写用于运行时多态性。

Java方法覆盖的规则

  1. 方法必须与父类中的名称相同。
  2. 方法必须具有与父类中相同的参数。
  3. 必须是IS-A关系(继承)。

理解没有方法覆盖的问题

下面让我们来了解如果在程序中不使用方法覆盖可能面临的问题。

class Vehicle {
    void run() {
        System.out.println("Vehicle is running");
    }
}

class Bike extends Vehicle {

    public static void main(String args[]) {
        Bike obj = new Bike();
        obj.run();
    }
}
Java

执行上面代码,输出结果如下 -

Vehicle is running
Java

问题是,必须在子类中提供一个run()方法,这就是为什么要使用方法覆盖。

方法覆盖的示例

在下面的这个例子中,在父类中和子类中都定义了run方法,但子类中有一些特定的实现。 方法的名称和参数是相同的,并且类之间有IS-A关系,因此这里run方法被覆盖了。

class Vehicle {
    void run() {
        System.out.println("Vehicle is running");
    }
}

class Bike2 extends Vehicle {
    void run() {
        System.out.println("Bike is running safely");
    }

    public static void main(String args[]) {
        Bike2 obj = new Bike2();
        obj.run();
    }
}
Java

执行输出结果如下 -

Bike is running safely
Java

Java方法重写的实例

考虑下面一个真实应用的情况,Bank是一个提供获取利率的功能的类。 但是,利息率因银行不同而有所区别。 例如,SBIICICIAXIS银行可以提供8%7%9%的利率。

class Bank {
    int getRateOfInterest() {
        return 0;
    }
}

class SBI extends Bank {
    int getRateOfInterest() {
        return 8;
    }
}

class ICICI extends Bank {
    int getRateOfInterest() {
        return 7;
    }
}

class AXIS extends Bank {
    int getRateOfInterest() {
        return 9;
    }
}

class Test2 {
    public static void main(String args[]) {
        SBI s = new SBI();
        ICICI i = new ICICI();
        AXIS a = new AXIS();
        System.out.println("SBI Rate of Interest: " + s.getRateOfInterest());
        System.out.println("ICICI Rate of Interest: " + i.getRateOfInterest());
        System.out.println("AXIS Rate of Interest: " + a.getRateOfInterest());
    }
}
Java

执行输出结果如下 -

SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9
Java

问题:可以覆盖静态方法吗?

答: 这是不可以的,静态方法不能被覆盖。可以通过运行时多态来证明不能覆盖,在稍后章节中将学习它。

问题: 为什么不能覆盖静态方法?
答: 因为静态方法是绑定类,而实例方法绑定对象。 静态属于类区域,实例属于堆区域。

问题:可以重写java main方法吗?

答: 这是不可以的,因为main是一个静态方法。

java方法重载和方法重写之间的区别:

//更多请阅读:https://www.yiibai.com/java/method-overriding-in-java.html#article-start

标签:run,覆盖,方法,Vehicle,Java,重写,class
From: https://www.cnblogs.com/cnetsa/p/17087552.html

相关文章

  • Java方法重载
    如果一个类中有多个具有相同名称但参数不同的方法,则称为方法重载。如果只需要执行一个操作,具有相同的方法名称将增加程序的可读性。假设必须执行给定数值的添加操作(求和......
  • 《深入理解Java虚拟机》第三章读书笔记(二)——HotSpot垃圾回收算法实现(OopMap,安全点安
    系列文章目录和关于我前面《深入理解Java虚拟机》第三章读书笔记(一)——垃圾回收算法我们学习了垃圾回收算法理论知识,下面我们关注下HotSpot垃圾回收算法的实现,分为以下几......
  • 使用VSCode创建Maven工程测试Java代码
    使用VSCode创建Maven工程测试Java代码发生缘由使用VSCode创建Maven工程测试Java代码环境介绍电脑系统:win10VSCode版本:1.72.0(usersetup)开始搭建搭建......
  • Java 基础语法
    @目录Java基础语法标识符&关键字数据类型1.数据类型的介绍2.类型转换变量运算符包机制JavaDoc文档注释Scanner类流程控制1.1if选择结构1.2switch(匹配)选择结构2.1......
  • JAVA-基础-包
    java、javax、org、sun包都是jdk提供的类包,且都是在rt.jar中。rt.jar是JAVA基础类库(java核心框架中很重要的包),包含lang在内的大部分功能,而且rt.jar默认就在根classloader的......
  • 细节决定成败:探究Mybatis中javaType和ofType的区别
    开启掘金成长之旅!这是我参与「掘金日新计划·12月更文挑战」的第24天,点击查看活动详情一.背景描述今天,壹哥给学生讲解了Mybatis框架,学习了基础的ORM框架操作及多对一......
  • 防止数据重复提交的6种方法(超简单)!
    有位朋友,某天突然问磊哥:在Java中,防止重复提交最简单的方案是什么?这句话中包含了两个关键信息,第一:防止重复提交;第二:最简单。于是磊哥问他,是单机环境还是分布式环境?得到......
  • django框架之drf:04、序列化器常用字段及参数,序列化器高级用法之source、定制字段数据
    Django框架之drf目录Django框架之drf一、序列化器常用字段及参数1、常用字段2、常用字段参数3、字段参数针对性分类二、序列化器高级用法之source1、定制字段名三、定制......
  • Request-获取请求行数据-方法介绍、代码演示
    Request-获取请求行数据-方法介绍3.request功能:1.获取请求消息数1.获取请求行数据GET/day14/demo1?name=zhangsanHTTP/1.1......
  • Java继承
    Java中的继承是一种机制,表示为一个对象获取父对象的所有属性和行为。在Java中继承是:可以创建基于现有类构建新的类。当您从现有类继承时,就可以重复使用父类的方法和字段......