什么时候我们需要防止 Java 中的方法覆盖?

什么时候我们需要防止 Java 中的方法覆盖?

在这里,我们将讨论为什么要防止在 java 中覆盖方法。因此,在进入主题之前,让我们看一下下面的重要概念,然后我们将进入实际主题。正如我们所知,面向对象编程 (OOP) 概念由以下 4 个重要概念组成:

封装

继承

多态性

抽象

多态是 Oops 的 4 个支柱中的重要支柱之一,Oops 是指以不同的方式执行单个操作。这意味着对象在不同条件下的行为不同。它分为两种主要类型,即

编译时多态性或静态多态性或早期绑定。

示例:方法重载

运行时多态性或动态多态性或后期绑定。

示例:方法覆盖

方法重载和方法覆盖之间也有一些区别。在项目中实际工作时,会出现一些情况,当我们需要实现重载或覆盖时,以及在某些场景中我们需要防止重载和覆盖。由于我们的主题旨在关注“我们为什么要防止方法覆盖?”让我们转到那部分。在从事任何项目时,我们避免以不同方式覆盖方法主要有以下两个原因并进一步讨论:

性能参数

设计决策

让我们讨论并通过深入了解它们来实现它们。

原因一:性能参数

在覆盖 JVM 时,会在运行时执行额外的东西,这会影响性能。是的,它是方法绑定,这意味着将调用的方法是在运行时根据引用指向的实际对象决定的,因此需要额外的时间,而在编译时的静态绑定中,将决定调用哪个方法(函数调用与适当的方法)。因此,很明显,我们正在防止覆盖意味着我们正在防止运行时绑定,我们正在防止运行时绑定意味着我们正在节省时间并提高性能。因此,有时我们会阻止覆盖以提高软件应用程序的性能。

原因 2:设计决策

在许多场景/情况下,我们不希望通过其派生类来更改特定基类方法的行为。这意味着我们希望保持父类方法不变,并且不会被其子类更改。

实施:

我们有一个基类 Car 和一个派生类 Skoda Car,其中基类有 3 个方法,如下所示:

速度()

条件()

维护()

这里我们希望speed()方法保持不变,另外两个方法condition()方法和maintenance()方法被改变(意味着派生类中提供的body)。如下例所述。

例子

Java实现

// Java Program to illustatte Prevention method overriding

// Importing input output classes

import java.io.*;

// Class 1

// Base class

class Car {

// We do not want speed to be changed change in base

// class, so we will not provide any body to speed()

// method in derived class So we will provide new body

// to condition() method and maintenance() method in

// derived class

// Methods of this class

public final void speed()

{

// Print statement

System.out.println("Maximum speed allowed");

}

public void condition()

{

// Print statement

System.out.println("good");

}

public void maintenance()

{

// Print statement

System.out.println("required");

}

}

// Class 2

// Derived class

class Skoda_Car extends Car {

public void condition()

{

// Print statement

System.out.println("Car condition good");

}

public void maintenance()

{

// Print statement

System.out.println("Maintenance not required");

}

}

// Class 3

// Main class

class Main {

// Main drive method

public static void main(String[] args)

{

// Here Parent class reference refers to

// a Child object so child class methods will be

// called This is known as run -time polymorphism

// Creating an object of child class in Main class

Skoda_Car c = new Skoda_Car();

// Calling methods in Base class over object created

// above

c.speed();

c.condition();

c.maintenance();

}

}

输出

Maximum speed allowed

Car condition good

Maintenance not required

相关推荐

旧话重提,2006年如日中天的小罗为何突然陨落?本以为06世界杯是他新王登基的一届
除了 MemTest,还有哪些更好的内存错误检测工具和方法
抖音支付如何关闭?抖音支付的好处和坏处
365bet亚洲官网

抖音支付如何关闭?抖音支付的好处和坏处

07-06 👁️ 9267