`

知识补充:抽象方法abstract为什么不能与static、synchronized、native混用

    博客分类:
  • Java
阅读更多

这个问题要从实际的逻辑角度去看的,首先要了解abstract,static,synchronized,native这些关键字干什么用

 
abstract是抽象的,指的是方法只有声明而没有实现,它的实现要放入声明该类的子类中实现


static是静态的,是一种属于类而不属于对象的方法或者属性,而我们知道,类其实也是一个对象,他是在class文件加载到虚拟机以后就会产生的对象,通常来说它是单例的,就是整个虚拟机中只有一个这样的类对象(当然,如果用新的类加载器也会生成新的类的对象)。


synchronized 是同步,是一种相对线程的锁。


native 本地方法,这种方法和抽象方法及其类似,它也只有方法声明,没有方法实现,但是它与抽象方法不同的是,它把具体实现移交给了本地系统的函数库,而没有通过虚拟机,可以说是java与其它语言通讯的一种机制

 


那么我们就来谈谈这些关键字为什么不能和abstract混用。


首先abstract与static,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,而static一定要有实现,因为abstract的类不能生产对象,但是static是属于类,而类已经是一个存在的对象,这两个关键字在这上面有一个关键的矛盾点。


synchronized 是同步,然而同步是需要有具体操作才能同步的,如果像abstract只有方法声明,那同步一些什么东西就会成为一个问题了,当然抽象方法在被子类继承以后,可以添加同步。


native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢?

 

 

 

 

 

 

感谢原文作者的分享以及出处:

http://louis1987.iteye.com/blog/944819

分享到:
评论

相关推荐

    java基础知识

    - abstract:抽象类,不能实例化,通常用作基类,要求子类重写其抽象方法。 2. 方法修饰符: - public:允许所有类访问。 - protected:限于本包和子类访问。 - default:只限本包访问。 - private:仅限本类...

    synchronized与static synchronized的区别

    当某个线程调用synchronized方法的时候,就会给它加上了一个锁,其他线程就会无法访问,等到这个锁被释放,别的线程拿到这个锁的时候,才可以访问该方法。 static synchronized这个是“全局锁”或者是“类锁”,该锁...

    【IT十八掌徐培成】Java基础第05天-03.抽象类-抽象方法-修饰符组合.zip

    关于修饰符组合,Java中的访问修饰符(public, protected, private, 默认)和final、static、synchronized等修饰符可以与抽象方法和抽象类结合使用,但有特定的规则: 1. 抽象方法不能是private,因为private方法在...

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    无论该类有多少个实例,Static Synchronized 都会锁定该类的所有实例,使得多个线程不能同时访问该类的同一个 synchronized 块。 Static Synchronized 相当于锁定该类的 Class 对象或 ClassLoader 对象,而不是锁定...

    JAVA访问修饰符大归纳

    + 抽象类中的抽象方法不能被定义成 private。 + 如果子类只需实现父类中的部分抽象方法,那么此时这个子类也只定义成抽象类。 + 如果子类还是抽象方法时,那么这个子类的子类必须实现所有的抽象方法(包括它爷爷...

    java面试笔试题经典版

    **关键字特性**:abstract方法不能是static、native或synchronized,因为它们的含义和抽象方法相冲突。构造器不能被重写,但可以被重载。 **对象传递**:当对象作为参数传递给方法时,传递的是对象的引用,而非对象...

    JAVA开发与应用抽象类与接口及多态PPT教案学习.pptx

    在接口中声明方法时,不能使用native、static、final、synchronized、private等修饰符。和public类一样,public接口也必须定义在与接口同名的文件中。接口中可以有数据成员,这些成员默认都是public static final的...

    Java访问修饰符大归类

    7. Abstract:抽象方法,没有方法体,出现在抽象类中。 8. Native:本地方法。 9. Synchronized:多线程同步。 抽象类和接口 抽象类和接口是 Java 中两种重要的编程概念。 抽象类 抽象类是一种特殊的类,不能被...

    JAVA面试题甲骨文

    答:abstract 方法不能是 static 的,也不能是 native 的或 synchronized 的。 20. 什么是内部类?Static Nested Class 和 Inner Class 的区别? 答:内部类是定义在另一个类中的类,Static Nested Class 是静态...

    Java面试宝典2011版

    - `abstract` 方法不能与 `static` 一起使用,因为抽象方法需要由子类实现,而静态方法是类级别的。 - `abstract` 方法也不能与 `native` 一起使用,因为本地方法是由本地代码实现的。 - `abstract` 方法可以与 `...

    Java编程语言构造方法研究.pdf

    构造方法不能有以下非访问性质的修饰:abstract,final,native,static,或者synchronized。 Java编程语言的构造方法的应用非常广泛,它可以用于初始化新实例化的对象,设置实例变量的值。构造方法的主要工作是...

    java面试题最新版

    19. **abstract与static、native、synchronized结合**:抽象方法(abstract)不能是static,因为static方法不能被重写;不能是native,因为native方法已由C/C++实现,不需要具体实现;也不能是synchronized,因为...

    synchronized与单例的线程安全

    1. 方法同步:通过在方法声明前加上`synchronized`关键字,整个方法体将被锁定,一次只有一个线程可以执行该方法。例如: ```java public synchronized void method() { // 代码 } ``` 2. 代码块同步:针对特定...

    《JAVA语言程序设计》期末考试试题及答案2(应考必备题库).doc

    知识点5:抽象类和abstract方法 * 拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法_ 知识点6:Java屏幕坐标系 * Java屏幕坐标系不是以像素为单位的,容器的左上角被确定为坐标的起点_ 知识点7:...

    java里面synchronized用法.doc

    synchronized 关键字不能被继承,即基类的 synchronized 方法在继承类中不自动变成 synchronized 方法。例如: ```java public class MyClass { public synchronized void myMethod() { // ... } } public class...

    韦尔德软件有限公司.doc

    11. **抽象方法与修饰符**:抽象方法(`abstract`)不能同时是`static`(静态)、`native`(原生方法)或`synchronized`(同步)。`static`方法不能被覆盖,而抽象方法是要被子类覆盖的,`native`和`synchronized`与...

    java笔试题java笔试题java笔试题

    - 抽象方法(abstract method)不能是 static,因为 static 方法属于类,而抽象方法属于接口或抽象类,这两者不能结合。 - 抽象方法也不能是 native,因为 native 方法需要在其他代码(如C/C++)中实现,而抽象方法...

Global site tag (gtag.js) - Google Analytics