abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized?
1个回答
展开全部
【答案】:
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 应该是作用在一个具体的方法上才有意义。
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 应该是作用在一个具体的方法上才有意义。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询