黑马程序员技术交流社区

标题: 静态倒入和继承的区别 [打印本页]

作者: 移动小坦克    时间: 2013-3-9 03:48
标题: 静态倒入和继承的区别
想了一晚上,想的大脑一团浆糊。。。。。
静态倒入的是,一个类的静态方法,方法倒入后可以直接使用。
继承是拿到了父类的方法,可以直接使用,下面那段代码,感觉静态倒入和继承,在使用上效果一样。
问题1:静态倒入和继承有什么区别呢???
问题2:当静态倒入的静态函数和父类的静态函数一样时(函数名,参数,甚至返回值都相同),调用时如何区分? 或者应对该情况,java有没有什么规则?
问题3:所有类都继承Object类,那么静态倒入一个静态函数以后,如果该函是复写了Object中的方法
             而使用静态倒入的函数的类又继承了Object类,这时如果单单调用该函数,会出现什么情况? ????

package han.cn;
import static java.util.Arrays.*;

class BaBa
{
        public static void show()
        {
                System.out.println("haha");
        }
}
public class StaticImport extends BaBa {

         public static void main(String[] args)
         {
                 int[] arr={1,2,3,4,5,6,7};
                  sort(arr);//调用的是静态倒入的方法
                   show();//调用的是父类的静态方法
                   int index=binarySearch(arr,1);//调用的是静态倒入的方法
                  System.out.println("index"+index);
         }
}


作者: 李辉    时间: 2013-3-9 04:45
本帖最后由 李辉 于 2013-3-9 04:53 编辑

静态导入只是为了简化输入而引入的,没有静态导入的话,当我们要用一个类的静态方法时得书写包名.类名。这个大家应该都清楚。下面回答你的问题。
1.静态导入和继承完全是两回事,你现在是感觉它们都能起到相同的作用,其实是你思考问题的角度错了!在java编程时,我们首要考虑的是类,而不是方法,不能只是为了得到一个类的方法,想继承就继承想导入就导入。除了你说的静态导入和继承,我们当然也可以在新类中创建旧类的对象来得到旧类的方法。而到底用什么方式,取决于类与类的关系。比如我们创建一个“图形"类,它有“画”“求面积”等方法,当我们创建一个“正方形”类,也需要“画”“求面积”方法时就只能用继承。没有人把“图形”类的那些方法做成静态的,然后在创建“正方形”时静态导入!也没有人在“正方形”中创建一个“图形”对象来得到它的方法。并不是实现不了!是不符合逻辑。
    Arrays是个工具类,它和我们要创建的类没有逻辑关系,它只是提供一些方法来操作数组,我们不能为了得到它的方法就去继承或者组合它!
    组织各个类的关系才是程序设计的重点和难点。组合与继承是基础,然后还有代理、适配器模式、装饰类模式、、、都是讲这个的。
2.你的第二个问题和第三个问题是一个问题,就是静态导入的方法和类自身的方法重名。我自己觉得默认会调用自身的方法,如果要用导入的方法则要加包名。不过我没测试,你可以试试。
作者: 李辉    时间: 2013-3-9 05:01
李辉 发表于 2013-3-9 04:45
静态导入只是为了简化输入而引入的,没有静态导入的话,当我们要用一个类的静态方法时得书写包名.类名。这 ...

我测试过了,当静态导入的方法与自身方法重名时,确实是默认调用自身方法,要调用导入的方法,用包名.类名调用
作者: 移动小坦克    时间: 2013-3-9 11:51
李辉 发表于 2013-3-9 05:01
我测试过了,当静态导入的方法与自身方法重名时,确实是默认调用自身方法,要调用导入的方法,用包名.类 ...

恩,是这样的,我也测试过。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2