今天爱分享给大家带来abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同时是synchronized?【面试题详解】,希望能够帮助到大家。
【参考答案】
abstract 的 method 不可以是 static 的,因为抽象的方法是要被子类实现的,而 static
与子类扯不上关系!
native 方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现
的问题,所以,它也不能是抽象的,不能与 abstract 混用。例如,FileOutputSteam 类要
硬件打交道,底层的实现用的是操作系统相关的 api 实现,例如,在 windows 用 c 语言实现
的,所以,查看 jdk 的源代码,可以发现 FileOutputStream 的 open 方法的定义如下:
private native void open(String name) throws FileNotFoundException;
如果我们要用 java 调用别人写的 c 语言函数,我们是无法直接调用的,我们需要按照
java 的要求写一个 c 语言的函数,又我们的这个 c 语言函数去调用别人的 c 语言函数。由
于我们的 c 语言函数是按 java 的要求来写的,我们这个 c 语言函数就可以与 java 对接上,
java 那边的对接方式就是定义出与我们这个 c 函数相对应的方法,java 中对应的方法不需
要写具体的代码,但需要在前面声明 native。
关于 synchronized 与 abstract 合用的问题,我觉得也不行,因为在我几年的学习和开
发中,从来没见到过这种情况,并且我觉得 synchronized 应该是作用在一个具体的方法上
才有意义。而且,方法上的 synchronized 同步所使用的同步锁对象是 this,而抽象方法上
无法确定 this 是什么。