这个问题要从实际的逻辑角度去看的,首先要了解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
分享到:
相关推荐
- abstract:抽象类,不能实例化,通常用作基类,要求子类重写其抽象方法。 2. 方法修饰符: - public:允许所有类访问。 - protected:限于本包和子类访问。 - default:只限本包访问。 - private:仅限本类...
当某个线程调用synchronized方法的时候,就会给它加上了一个锁,其他线程就会无法访问,等到这个锁被释放,别的线程拿到这个锁的时候,才可以访问该方法。 static synchronized这个是“全局锁”或者是“类锁”,该锁...
关于修饰符组合,Java中的访问修饰符(public, protected, private, 默认)和final、static、synchronized等修饰符可以与抽象方法和抽象类结合使用,但有特定的规则: 1. 抽象方法不能是private,因为private方法在...
无论该类有多少个实例,Static Synchronized 都会锁定该类的所有实例,使得多个线程不能同时访问该类的同一个 synchronized 块。 Static Synchronized 相当于锁定该类的 Class 对象或 ClassLoader 对象,而不是锁定...
+ 抽象类中的抽象方法不能被定义成 private。 + 如果子类只需实现父类中的部分抽象方法,那么此时这个子类也只定义成抽象类。 + 如果子类还是抽象方法时,那么这个子类的子类必须实现所有的抽象方法(包括它爷爷...
**关键字特性**:abstract方法不能是static、native或synchronized,因为它们的含义和抽象方法相冲突。构造器不能被重写,但可以被重载。 **对象传递**:当对象作为参数传递给方法时,传递的是对象的引用,而非对象...
在接口中声明方法时,不能使用native、static、final、synchronized、private等修饰符。和public类一样,public接口也必须定义在与接口同名的文件中。接口中可以有数据成员,这些成员默认都是public static final的...
7. Abstract:抽象方法,没有方法体,出现在抽象类中。 8. Native:本地方法。 9. Synchronized:多线程同步。 抽象类和接口 抽象类和接口是 Java 中两种重要的编程概念。 抽象类 抽象类是一种特殊的类,不能被...
答:abstract 方法不能是 static 的,也不能是 native 的或 synchronized 的。 20. 什么是内部类?Static Nested Class 和 Inner Class 的区别? 答:内部类是定义在另一个类中的类,Static Nested Class 是静态...
- `abstract` 方法不能与 `static` 一起使用,因为抽象方法需要由子类实现,而静态方法是类级别的。 - `abstract` 方法也不能与 `native` 一起使用,因为本地方法是由本地代码实现的。 - `abstract` 方法可以与 `...
构造方法不能有以下非访问性质的修饰:abstract,final,native,static,或者synchronized。 Java编程语言的构造方法的应用非常广泛,它可以用于初始化新实例化的对象,设置实例变量的值。构造方法的主要工作是...
19. **abstract与static、native、synchronized结合**:抽象方法(abstract)不能是static,因为static方法不能被重写;不能是native,因为native方法已由C/C++实现,不需要具体实现;也不能是synchronized,因为...
1. 方法同步:通过在方法声明前加上`synchronized`关键字,整个方法体将被锁定,一次只有一个线程可以执行该方法。例如: ```java public synchronized void method() { // 代码 } ``` 2. 代码块同步:针对特定...
知识点5:抽象类和abstract方法 * 拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法_ 知识点6:Java屏幕坐标系 * Java屏幕坐标系不是以像素为单位的,容器的左上角被确定为坐标的起点_ 知识点7:...
synchronized 关键字不能被继承,即基类的 synchronized 方法在继承类中不自动变成 synchronized 方法。例如: ```java public class MyClass { public synchronized void myMethod() { // ... } } public class...
11. **抽象方法与修饰符**:抽象方法(`abstract`)不能同时是`static`(静态)、`native`(原生方法)或`synchronized`(同步)。`static`方法不能被覆盖,而抽象方法是要被子类覆盖的,`native`和`synchronized`与...
- 抽象方法(abstract method)不能是 static,因为 static 方法属于类,而抽象方法属于接口或抽象类,这两者不能结合。 - 抽象方法也不能是 native,因为 native 方法需要在其他代码(如C/C++)中实现,而抽象方法...