课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 不要在本类中覆盖静态导入的变量和方法
  • 不要在本类中覆盖静态导入的变量和方法

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

  • 昆明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--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56