java多态中的就近原则介绍

Java多态中的就近原则介绍

Java中的多态性有三种表现形式:方法重载、方法重写和对象引用的多态性。其中,对象引用的多态性就是实现延迟绑定的方式,它可以让我们在程序运行时根据实际对象类型来确定调用哪个方法。

在多态场景下,就近原则是作用于对象引用调用方法时的参数列表类型的选择(即决定使用哪个方法),它和方法重载得到相同条件下的参数匹配的方式相同。当Java编译器在遇到一个方法调用时,有多个方法可以作为候选时,就近原则规定,编译器使用参数类型与方法参数类型最接近的那个方法。

举例说明:

假设我们有一个父类Animal,子类Cat继承了父类。父类中定义了一个show()方法接收参数为Animal类型,子类重写了show()方法并接收参数为Cat类型。

class Animal {
    public void show(Animal animal) {
        System.out.println("Animal show");
    }
}

class Cat extends Animal {
    @Override
    public void show(Animal animal) {
        System.out.println("Cat show");
    }

    public void show(Cat cat) {
        System.out.println("Cat show, Cat parameter");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal cat = new Cat();
        Cat cat1 = new Cat();
        cat.show(cat1);
    }
}

上述代码中,我们创建了一个Animal类型的变量cat,并用它指向了一个Cat类的实例。在调用cat.show(cat1)时,会出现多个同名的show方法可供调用,参数列表分别为(Animal)(Cat)。由于参数类型Cat更加接近方法中的参数类型,所以选择就近规则,在此情况下,会选择(Cat)类型的方法,输出结果为Cat show, Cat parameter

再举例说明:

假设我们定义两个接口InterfaceAInterfaceB,类Test实现了两个接口,并分别实现了接口方法showA()showB()

interface InterfaceA {
    public void show();
}

interface InterfaceB {
    public void show();
}

class Test implements InterfaceA, InterfaceB {
    public void show() {
        System.out.println("Test");
    }

    public static void main(String[] args) {
        Test test = new Test();
        InterfaceA ia = test;
        InterfaceB ib = test;
        ia.show();
        ib.show();
    }
}

在代码中,我们创建了一个Test类型的实例test并将其赋值给类型为InterfaceAInterfaceB的两个变量。分别调用ia.show()ib.show()时,输出结果均为Test。由于Java中的接口只能定义未实现的方法,因此编译器需要根据参数类型来确定使用哪个实现,这里就近规则依然适用,选择输出Test

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java多态中的就近原则介绍 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 设置Win10文件资源管理器默认打开“这台电脑”

    设置Win10文件资源管理器默认打开“这台电脑” 在Win10中,打开文件资源管理器默认会打开“最近访问的文件夹”,这对于有些用户来说可能不太方便,他们更喜欢默认打开“这台电脑”界面。以下是设置Win10文件资源管理器默认打开“这台电脑”的方法: 方法一:使用文件资源管理器选项 打开文件资源管理器,单击“文件”选项卡,在菜单中选择“更改文件和文件夹选项”。 …

    其他 2023年3月28日
    00
  • CEF C++调用前端js方法展示传递过来的图片数据

    CEF(Chromium Embedded Framework)是一种基于Chromium的嵌入式浏览器框架,它可以将Web技术嵌入到本地应用程序中。在使用CEF时,我们可以通过C++调用前端JavaScript方法,实现数据的传递和展示。本文将为您提供一份完整攻略,包括CEF C++调用前端JavaScript方法的基本原理、使用方法、示例说明等。 CEF…

    other 2023年5月5日
    00
  • 如何在excel中创建guid?

    在Excel中创建GUID可以帮助我们生成唯一的标识符,以下是在Excel中创建GUID的详细攻略: 步骤1:打开Excel 首先,我们需要打开Excel,并创建一个新工作簿。 步骤2:打开VBA编辑器 在Excel中,我们可以使用VBA编辑器来创建GUID。要打开VBA编辑器,我们可以按下“Alt”和“F11”键或者单击“开发人员”选项卡中的“Visual…

    other 2023年5月9日
    00
  • ernie(二妮儿)模型初探

    以下是关于“ERNIE(二妮儿)模型初探”的完整攻略,包括ERNIE模型的定义、原理、训练方法、应用场景和两个示例说明。 ERNIE模型的定义 ERNIE(Enhanced Representation through kNowledge IntEgration)是百度推出的一种基于知识增强的预训练语言模型。ERNIE模型在BERT模型的基础上,通过引入实体…

    other 2023年5月7日
    00
  • 路由器静态ip设置图文步骤

    当设置路由器的静态IP时,可以按照以下步骤进行操作: 打开浏览器并输入路由器的管理界面地址。通常情况下,这个地址是路由器的默认网关地址。你可以在计算机的网络设置中找到默认网关地址。例如,如果默认网关地址是192.168.1.1,那么在浏览器中输入http://192.168.1.1。 输入正确的用户名和密码登录到路由器的管理界面。如果你没有更改过默认的登录凭…

    other 2023年7月31日
    00
  • Java详细讲解包的作用以及修饰符的介绍

    我来为你详细讲解 “Java详细讲解包的作用以及修饰符的介绍”。 包的作用 Java中的包(package)是一种组织类文件的方式,类似于文件夹。它可以帮助我们更好的管理代码,使得代码组织结构更加清晰有序,减少命名冲突,并且方便我们的维护和重用。包可以包含子包和其他类文件。 同时,Java中的包还可以通过关键字” import” 导入其中的类,使得其他的Ja…

    other 2023年6月26日
    00
  • Unix系统中文件管理和文件权限设置教程

    Unix系统中文件管理和文件权限设置教程 文件管理基础 Unix系统中的文件可以分为普通文件和目录文件两种,二者的区别在于目录文件可包含多个文件和子目录文件。Unix系统中,每个文件和目录都有一个唯一的路径描述符,用于指定文件或目录的位置及名称。 文件和目录名称 Unix系统中的文件和目录名称可以是任意字符,但通常建议只使用字母、数字和少数特殊字符(如“-”…

    other 2023年6月27日
    00
  • Win10一周年更新正式版ISO官方光盘镜像免费下载地址

    Win10一周年更新正式版ISO官方光盘镜像免费下载地址攻略 Win10一周年更新正式版ISO官方光盘镜像是微软为Windows 10操作系统发布的重要更新版本。以下是详细的攻略,包括两个示例说明,以帮助您获取免费下载地址。 步骤一:访问微软官方网站 首先,您需要访问微软官方网站以获取Win10一周年更新正式版ISO官方光盘镜像的免费下载地址。请按照以下步骤…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部