Java面试题总结(二)

面试题好基友---重写、重载

或许是因为面向对象思想对于编程语言很重要的缘故吧,重写、重载总是能在面试题中占有一席之地。有些面试甚至会故意将重写、重载写成英文来考查,比如请简要描述Overload和Override的区别。

下面从面试的角度回答这个问题。

重载:描述的是在同一个类中,两个方法的方法名名完全相同,参数列表不同,方法修饰词、返回值类型可以相同也可以不相同,遵循编译期绑定(静态绑定)的语法现象。

重写:描述的是在两个具有继承关系的两个或多个类中各自的非静态方法之间的关系,两个方法的方法名、参数列表必须完全相同,访问修饰词、返回值类型、异常类型必须兼容,遵循运行时绑定(动态绑定)的语法现象。

说完重写后,可以适当展开关于"兼容"(匹配)这个词的内涵与外延。

方法访问修饰词、返回值类型、异常类型必须匹配指的是如下三点:

1)子类重写父类的方法访问权限不能小于父类方法的访问权限;

2)如果是基本数据类型或void类型,则父、子类方法返回值必须一致;如果是引用数据类型,子类重写父类的方法返回值类型不能大于父类方法返回值类型;

3)子类重写父类的方法抛出异常的类型范围不能大于父类方法抛出异常类型。

这样做的目的是为了在向上造型时,父类引用能够完全接受子类的对象。     

本来我也不想搞得这么套路,面试官可不管你技术到底是否是真的牛逼,你回答不上来这种基础问题,人家就觉得你菜或者逻辑思维能力、语言表达能力不强,于是在薪水待遇上,就...你好意思要这个价么。Who care?走上社会,还是得学点如何应对套路,免得到处被人套路。

深入理解重写、重载机制

class Father {
  public static void printInfo() {
        System.out.println("FatherClass Info");
    }
}
public class Child extends Father {
    public static void printInfo() {
        System.out.println("ChildClass Info");
    }
    public static void main(String[] args) {
        Father cc = new Child();
        cc.printInfo();    // 输出FatherClass Info
    }
}

class Father {
public void printInfo() {
        System.out.println("FatherClass Info");
    }
}
public class Child extends Father {
    public void printInfo() {
        System.out.println("ChildClass Info");
    }
    public static void main(String[] args) {
        Father cc = new Child();
        cc.printInfo();    // 输出ChildClass Info
    }
}

再看一道关于返回值类型的题

方法重写要求访问权限、抛出异常类型、返回值类型匹配。

以下代码,输出结果是 ?

class Father {
    public int getNum() {
        return 1;
    }
}

class Child extends Father {
    public long getNum() {
        return 2;
    }
}

public class Test {
    public static void main(String[] args) {
        Fathe f = new Child();
        System.out.println(f.getNum());
    }
}

A、1
B、2
C、编译错误
D、12

如果只是粗略地理解重写现象的父子类方法之间返回值类型关系,在这道题上就会犯错。

必须注意到,子类方法返回值类型不大于父类方法返回值类型针对的引用数据类型,对于基本数据类型和void类型必须相同。

好想找人聊个天

如果理解我思路有点困难,不妨看看我的另外一篇介绍Java对象模型的文章---《Java Object Model(一)》

这篇文章原文来自国外程序员交流社区ProgramCreek,在我翻译中加入了许多自己的理解。由于这是我接触Java后写的第一篇博客,很多方面处理不当,希望多包涵。

回看以前写的这篇博客,发现自己以前是多稚嫩,现在确实成长了不少,很多不理解的内容也慢慢理解了。

之前有人说我研究这些玩意没有多大的意思,重要的是了解的广度,而不是深度。其实,在我看来这只是人的价值观、人生观甚至世界观不同而已。(附:其实我接上写世界观,但是有人说连世界都没看完整,哪来的世界观。于是,我还是把这几个字删除了。)每个人都有不同的追求,很多人会随着大潮而动,然而我却希望自己还是原来的那个自己,不会为考试而死记硬背,不会为讨生活而放弃初心。

可能很多人回问,为什么我的博客老是有鸡汤的味道。主要是我感到自己太孤独,没有什么人可以倾诉,感觉没有人能够理解我,或许是我不想在现实生活中让别人理解吧。最近压力特别大,慢慢地被生活抹平了身上的菱角。走一步看一步吧。

posted @ 2016-07-30 18:44  forget406  阅读(569)  评论(1编辑  收藏  举报