在电脑里找到一份当时学习JAVA时的笔记,看到一些现在已经遗忘的细节。稍微整理了几个,发出来与大家分享。代码很简单,不运行你能得出正确结果吗
运行结果Ctrl+A就能看到一、动态绑定:
public class Test {
public static void main(String[] args) {
A obj = new B();
int n = 2;
obj.method(n);
}
}class A {
public void method(double n) {
System.out.println("A:double");
}
}class B extends A {
public void method(int n) {
System.out.println("B:int");
}
}
运行结果:A:double二、switch语句
public class Test {
public static void main(String[] args) {
int value = 2;
switch (value) {
case 1:
System.out.print("a");
break;
case 2:
System.out.print("b");
default:
System.out.print("c");
case 3:
System.out.print("d");
break;
}
}
}
运行结果:bcd三、泛型可变参数
public class Test {
public static void main(String[] args) {
method(new int[]{1, 2, 3});
method(1, 2, 3);
method(1, 2.1);
}

public static <T> void method(T... s) {
System.out.println(s.getClass());
}
}
运行结果:

class [[I
class [Ljava.lang.Integer;
class [Ljava.lang.Number;
当然,java语言细节方面的陷阱很多,大家知道的都可以分享一下java陷阱

解决方案 »

  1.   

    因为结果字体颜色和背景色一样#F5F5F5,给大家一个思考时间
      

  2.   

    B类method(int n)是重载的方法,B类没有重写A类method(float f)方法。
      

  3.   

    第一条 也上当了,哎~
    static class A {
        public void method(double n) {
            System.out.println("A:double");
        }
    }
     
    static class B extends A {
        public void method(int n) {
            System.out.println("B:int");
        }
        
        @Override
        public void method(double n) {
            System.out.println("B:double");
        }
    }
      

  4.   

    第一个才不是什么重载,重载有一个概念很重要就是必须在一个类里
    之所以是这个结果是因为父类引用指向子类对象,调用的是父类的method方法,不信你把B类的方法method改个名字,obj对象都调不到这个方法