黑马程序员技术交流社区

标题: 黑马程序员自学第二天,学习笔记,面试题:重载与重写的区别。 [打印本页]

作者: wssjdysf    时间: 2013-10-30 15:09
标题: 黑马程序员自学第二天,学习笔记,面试题:重载与重写的区别。
1.workspace与project。

   workspace工作区间,project一个项目工程。


2.Perspective与view。

   Persperctive是透视图。view是视图。每一个小窗口就是视图,若干个不同的小窗口集合在一起就是透视图。


3.设置整个workspace的javac与java。

   设置整个workspace的javac,Window-Preferences(喜好)-Java-Compiler(编译,题外话“程序员经常用到的javac中的c也是这个单词,compoler”):Compiler compliance level选项

   设置整个workspace的java,Window-Preferences(喜好)-Java-Installed JREs(安装过的JREs(java runtime environment ,java运行时环境))


4.设置单个工程的javac与java

   设置单个工程的javac,鼠标右键单击项目工程名-Properties(属性)-Java Compiler(编译):Compiler compliance level选项

   设置单个工程的java,鼠标右键单击项目工程名-Properties(属性)-Java Build Path-右边视图的上方Libraries;或者鼠标右键单击项目工程名-Build Path-Confugure Build Path...-右边视图的上方Libraries

    4-1.高版本的java能否运行低版本的javac编译的程序?
    能(原因是:开发软件版本一般都是向下兼容,向上不考虑的。)
    4-2.低版本的java能否运行高版本的javac编译的程序?
    不能(原因是:开发软件版本一般都是向下兼容,向上不考虑的。)


5.快捷键的绑定与代码模板

   绑定快捷键:Window-Preference(喜好)-General(一般)-双击Keys(快捷键)。想知道更详细的同学请参看视频: “张孝祥Java基础加强第一部分03小节”

   代码模板的制作:Window-Preference(喜好)-Java-Editor(编辑)-Templates(模板)-New。想知道更详细的同学请参看视频: “张孝祥Java基础加强第一部分06小节”


6.切换工作区间(工作台)的小操作,File-Switch(选择) Workspace(工作区间)


7.小知识:许多个java包集合在一起就叫做java库。


8.普通的import语句可以导入一个类或某个包中的所有类。


9.import static语句导入一个类中的某个静态方法或所有静态方法

  关于静态导入的好处,与坏处。请参照http://macrob.blog.163.com/blog/static/20382818720122152294480/

  import static java.lang.Math.max;

  /**
         * 一般正常写法
         */
//        System.out.println(Math.max(3, 6));
//        System.out.println(Math.abs(3 - 6));
        /**
         * 不想写类名,想直接用方法名,就要用到静态导入,静态导入是JDK5.0的新特性
         */
        System.out.println(max(3, 6));
        System.out.println(abs(3 - 6));//这方法编译报错


10.一个大公司的面试题:说说overload(重载)与override(重写)的区别

      重载定义:在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表,和参数列表顺序不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表和参数顺序不同,这种方法称之为重载方法。重载仍符合多态定义——通过单一标识支持不同特定行为的能力,只是重载属于静态多态,而不是通过继承和虚函数实现的动态多态。重载(overload)和多态无关,真正和多态相关的是覆盖(inheritance)。重载只是一种语言特性,是一种语法规则,与多态无关,与面向对象也无关。不过针对所谓的第二种重载,有一个专门的名词--重写或重定义。

     重载特点:由于重载可以在同一个类中定义功能类似的函数,这给程序员管理类的相似函数提供了极大的方便。例如,在一个定义圆的类中,需要设定圆心和半径来确定一个圆对象,程序员不需要设定setRadius(float r)和SetPoint(float x,float y)两个不同名函数,而只需要设定一个CSetCicle函数名就够了。在这个简单的例子中重载并没有明显的优势,可是当一个类中相似功能函数有几十、上百个的时候,重载的优势就显现出来了,这时程序员不需要去记这么繁多的函数名,可以把更多的精力放在程序本身上。重载的方法只属于子类。
  
    上代码:
   public void test1(int x,int y){//--------1--------- }
   
    public void test1(int x,int y,int z){//--------2---------}
   
    public void test1(int x,String y){//--------3--------- }
   
    public void test1(String y,int x){//--------4---------  }
   
    public String test1(int x,int y){//--------5--------- return null; }
    1,2参数数量不同;1,3参数类型不同;3,4参数顺序不同;这些情况都算重载。
    1,5返回值类型不同;这情况不算重载。

  

    重写定义:通常,派生类继承基类的方法,因此,在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现.
例如,假设动物类存在"跑"的方法,从中派生出马和狗,马和狗的跑得形态是各不相同的,因此同样方法需要两种不同的实现,这就需要"重新编写"基类中的方法.
上代码:
public class Animal {
   
    public void run(){
        System.out.println("我是动物我会跑!");
    }
   
    public static void main(String[] args){
        //这里有个知识点,就是里氏代换原则(看不懂的同学,请多多百度或google)
        //实例化一个动物类
        Animal animal = new Animal();
        //实例化一个马类
        Animal horse = new Horse();
        //实例化一个鸡类
        Animal chicken = new Chicken();
        //实例化一个鸟类
        Animal bird = new Bird();
        
        animal.run();
        horse.run();
        chicken.run();
        bird.run();
    }
}
//一个方法有@Override,一个方法没有@Override,在这我不给答案,各位同学自己想想哈
class Horse extends Animal{
    @Override
    public void run(){
        System.out.println("我是马,我继承了动物类,重写了run方法,我用四条腿跑!");
    }
}
class Chicken extends Animal{
   
    public void run(){
        System.out.println("我是鸡,我继承了动物类,重写了run方法,我用二条腿跑!");
    }
}
class Bird extends Animal{
   
}
输出结果:
我是动物我会跑!
我是马,我继承了动物类,重写了run方法,我用四条腿跑!
我是鸡,我继承了动物类,重写了run方法,我用二条腿跑!
我是动物我会跑!

重写总结:
1、必须是在继承里,
2、方法名、返回值类型、参数个数和参数类型 都必须相同
3、派生类重写的方法的访问权限不能低于基类的权限
       3-1.当基类(也就是父类)被重写的方法作用域为public时,方法可以被重写
       3-2.当基类(也就是父类)被重写的方法作用域为protected时,方法可以被重写
       3-3.当基类(也就是父类)被重写的方法作用域为private时,方法不可以被重写
4、派生类抛出的异常应该和基类相等或比基类更小



他们的区别:重载与重写的区别就在于是否覆盖,重写一般多发生在不同的类且存在继承关系之间,而重载多是在一个类里或者一块代码段里。



11.有一个写法public void show(int x,int ... args){
   
}
其中的int ... args写法为可变参数写法,在做东西的时候会有用的,想知道详细的同学请参看视频: “张孝祥Java基础加强第一部分09小节”





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