zoukankan      html  css  js  c++  java
  • Java中的多态方法

    public class Main {
        public void test(Object o) {
            System.out.println("Object");
        }
        public void test(String s) {
            System.out.println("String");
        }
        public static void main(String[] args) {
            Main that = new Main();
            that.test(null);
        }
    }

    这段代码运行的结果是

    J:	est>java Main
    String
    
    J:	est>

    因为Java处理null时会优先处理更确切的对象

    如果此时还有一个多态方法是ArrayList,程序会报错(编译阶段),因为不知道去适配String还是ArrayList

    J:	est>javac Main.java
    Main.java:14: error: reference to test is ambiguous
                    that.test(null);
                        ^
      both method test(String) in Main and method test(ArrayList) in Main match
    1 error

    如果是基础数据类型和对象类型,则会适配对象类型

    J:	est>type Main.java
    import java.util.ArrayList;
    public class Main {
            public void test(Object o) {
                    System.out.println("Object");
            }
            public void test(String s) {
                    System.out.println("String");
            }
    //      public void test(ArrayList a){
    //              System.out.println("ArrayList");
    //      }
            public void test(int i){
                    System.out.println("int");
            }
            public static void main(String[] args) {
                    Main that = new Main();
                    that.test(null);
            }
    }
    J:	est>javac Main.java
    
    J:	est>java Main
    String
    
    J:	est>

    如果只有基础数据类型和Object,因为Object是对象,则调用Object

    J:	est>type Main.java
    import java.util.ArrayList;
    public class Main {
            public void test(Object o) {
                    System.out.println("Object");
            }
    //      public void test(String s) {
    //              System.out.println("String");
    //      }
    //      public void test(ArrayList a){
    //              System.out.println("ArrayList");
    //      }
            public void test(int i){
                    System.out.println("int");
            }
            public static void main(String[] args) {
                    Main that = new Main();
                    that.test(null);
            }
    }
    J:	est>javac Main.java
    
    J:	est>java Main
    Object
    
    J:	est>

    如果只有基础数据类型,则编译报错,因为java不支持int与null转换

    J:	est>javac Main.java
    Main.java:17: error: incompatible types: <null> cannot be converted to int
                    that.test(null);
                              ^
    Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
    1 error
    
    J:	est>
  • 相关阅读:
    改动文件名称
    十五周 项目1 工资数据的输入
    通过YAJL获取json中的值
    图数据库之Pregel
    hdu 1028 Ignatius and the Princess III
    iOS使用ffmpeg播放rstp实时监控视频数据流
    Android的Bitmap和BitmapDrawable类解析-android学习之旅(六十)
    MAC中在eclipse luna上搭建移动平台自己主动化測试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录
    QCustomPlot使用手冊(三)
    Mac下搭建react native开发环境
  • 原文地址:https://www.cnblogs.com/liutianchen/p/8487925.html
Copyright © 2011-2022 走看看