昆明java培训
达内昆明广州春城路

18487146383

热门课程

不要在本类中覆盖静态导入的变量和方法

  • 时间:2016-09-30
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明Java培训机构的老师发现,如果在一个类中的方法及属性与静态导入的方法及属性相同会出现什么问题呢?看下面的代码

1 import static java.lang.Math.PI;

2 import static java.lang.Math.abs;

3

4 public class Client10 {

5    //常量名于静态导入的PI相同

6    public final static String PI = "祖冲之";

7    //方法名于静态导入的方法相同

8    public static int abs(int abs) {

9        return 0;

10    }

11

12    public static void main(String[] args) {

13        System.out.println("PI = "+PI);

14        System.out.println("abs(-100) = "+abs(-100));

15    }

16 }

以上代码中定义了一个String类型的常量PI,又定义了一个abs方法,与静态导入的相同。首先说好消息,代码没有报错,接下来是坏消息:我们不知道那个属性和方法别调用了,因为常量名和方法名相同,到底调用了那一个方法呢?运行之后结果为:

PI = "祖冲之",abs(-100) = 0;

很明显是本地的方法被调用了,为何不调用Math类中的属性和方法呢?那是因为编译器有一个"最短路径"原则:如果能够在本类中查找到相关的变量、常量、方法、就不会去其它包或父类、接口中查找,以确保本类中的属性、方法优先。

因此,如果要变更一个被静态导入的方法,最好的办法是在原始类中重构,而不是在本类中覆盖.

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:java程序:少用静态导入
下一篇:java培训:显示声明UID

电脑编程学什么专业好?java好吗?【达内java培训】

上java培训有用吗?怎么衡量?【达内培训】

昆明java培训机构怎么选?昆明达内java培训怎么样?

学Java自学还是达内培训机构好?

选择城市和中心
贵州省

广西省

海南省

台湾