您的位置:首页 > 职场人生

1.JAVA面试专题 一 基础篇2

2016-12-13 20:15 148 查看
一.java 中实现多态的机制是什么?

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方 法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运 行的那个对象的方法,而不是引用变量的类型中定义的方法。

二.abstract class 和 interface 有什么区别?

含有 abstract 修饰符的 class 即为抽象类,abstract 类不能创建的实例对象。含有 abstract

方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静 态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为 abstract 类型。

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口 中的方法定义默认为 public abstract 类型,接口中的成员变量类型默认为 public static final。

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象 的普通方法。

4. 抽象类中的抽象方法的访问类型可以是 public,protected 和(默认类型,虽然

eclipse 下不报错,但应该也不行),但接口中的抽象方法只能是 public 类型的,并且默认即

为 public abstract 类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任 意,但接口中定义的变量只能是 public static final 类型,并且默认即为 public static final 类 型。

7. 一个类可以实现多个接口,但只能继承一个抽象类。

三abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同 时是 synchronized?

abstract 的 method 不可以是 static 的,因为抽象的方法是要被子类实现的,而 static 与子 类扯不上关系!native 方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问 题,所以,它也不能是抽象的,不能与 abstract 混用。例如,FileOutputSteam 类要硬件打 交道,底层的实现用的是操作系统相关的 api 实现,例如,在 windows 用 c 语言实现的, 所以,查看 jdk 的源代码,可以发现 FileOutputStream 的 open 方法的定义如下:

private native void open(Stringname) throws FileNotFoundException;

如果我们要用 java 调用别人写的 c 语言函数,我们是无法直接调用的,我们需要按照 java 的要求写一个 c 语言的函数,又我们的这个 c 语言函数去调用别人的 c 语言函数。由于我们 的 c 语言函数是按 java 的要求来写的,我们这个 c 语言函数就可以与 java 对接上,java 那 边的对接方式就是定义出与我们这个 c 函数相对应的方法,java 中对应的方法不需要写具 体的代码,但需要在前面声明 native。

关于 synchronized 与 abstract 合用的问题,我觉得也不行,因为在我几年的学习和开发中, 从来没见到过这种情况,并且我觉得 synchronized 应该是作用在一个具体的方法上才有意 义。而且,方法上的 synchronized 同步所使用的同步锁对象是 this,而抽象方法上无法确 定 this 是什么。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: