zoukankan      html  css  js  c++  java
  • 关于java多态中重载的理解

    要理解多态,就必须有一个大的理解方向,不然很容易绕进去。

    首先知道多态的释义:多态性是指一个名词可以有多种语义。

      对于java的多态性学习者来说,就是必须要知道多个同名方法在不同情况下的使用规则。

      java的同名方法只能通过两种机制实现。覆盖重载。(覆盖一般出现在继承中,子类覆盖父类,而重载一般出现在同一个类中,参数不同的同名方法,c++中也有)

      先探讨重载

      一、我们知道重载需要参数不同,那么不同体现在哪里?

      1、参数的个数

      2、参数的类型不同

      3、参数的位置(这已经包含在上述两者之中)

      下面分别体现参数的个数,类型不同引起的重载

      

    public class TestOverload_1 {
        public void showMsg() {
            System.out.println("a method without parameter");
        }
        public void showMsg(int k) {//这是对方法的重载
            System.out.println("a method parameter with k , k = "+k);
        }
        public static void main(String args[]) {
            TestOverload_1 oa =new TestOverload_1();
            oa.showMsg();
            oa.showMsg(100);
        }
    }
    public class TestOverload_2 {
        public void showMsg(char ch) {
            System.out.println("a method with character parameter ch,ch= "+ch);
        }
        public void showMsg(int k) {
            System.out.println("a method with integer parameter k,k= "+k);
        }
        public static void main(String args[]) {
            TestOverload_2 oa = new TestOverload_2();
            oa.showMsg('a');
            oa.showMsg(3);
        }
    }

    注意:对于静态和普通实例方法的重载是一致的,它们之间也可以相互重载,同理构造方法也能进行重载。,修饰符没有任何限制。

    二、关于重载的编译解析原理过程大概如下:

    先根据调用的方法名查找是否有该方法--------->比较形参与实参数目,如多个符合,进入候选集---------->从候选集中比较类型是否匹配,如有多个匹配,进入可行集------->查找最佳匹配,如同时存在形参为int 型 与double型方法,选择转换较少的,若转换相同,则报错

    源码如下:

    public class Matching {
        public void show(int a,int b,int c) {
            System.out.println("1---a="+a+",b="+b+",c="+c);
        }
        public void show(int a,int b,double c) {
            System.out.println("2---a="+a+",b="+b+",c="+c);
        }
        public void show(int a,double b,double c) {
            System.out.println("3---a="+a+",b="+b+",c="+c);
        }
        public void show(double a,double b, int c) {
            System.out.println("4---a="+a+",b="+b+",c="+c);
        }
        public void call() {
            show(1, 2, 3);//匹配第一个
    //        show(1.0, 2.0, 3.0);//没有一个可行的方法
            show(1.0, 2, 3);//最佳匹配第四个
    //        show(1, 2.0, 3);//三,四匹配,但没有最佳,所以不通过
            show(1, 2, 3.0f);//匹配第二个
    
        }
    }

    好了,以上就是关于java多态在重载时的一些规则与原理。关于覆盖的规则与理解在这一篇文章中。

     

  • 相关阅读:
    kafka概念使用简介注意点
    spring boot整合log4j2
    postgresql和oracle数据库对比
    postgresql数据操作
    Django缓存序列化信号
    Django补充
    Git学习
    JavaScript语法和类型
    Django分页
    Vue:配置组件
  • 原文地址:https://www.cnblogs.com/gambler/p/8584930.html
Copyright © 2011-2022 走看看