不同点:
● 抽象类中可以定义构造器,接口不能;
abstract class A{
public A(){
}
}
interface B{
public B(){
}
}
● 抽象类可以有抽象方法和具体方法,接口不能有具体方法;
● 接口中的成员全都是 public 的,抽象类中的成员可以使用private、public、protected、默认等修饰;
● 有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法;
● 一个类只能继承一个抽象类,一个类可以实现多个接口;
相同点:
● 不能够实例化;
即使抽象类有构造方法也不行
● 可以将抽象类和接口类型作为引用类型;
● 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类;
abstract class A{
public abstract void a();
public abstract void a1();
public void a2(){
}
}
interface B{
void b();
void b1();
}
public class Test extends A implements B {
@Override
public void a() {
}
@Override
public void a1() {
}
@Override
public void b() {
}
@Override
public void b1() {
}
}
或者
abstract class A{
public abstract void a();
public abstract void a1();
public void a2(){
}
}
interface B{
void b();
void b1();
}
public abstract class Test extends A implements B {
}
都不能。
● 抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
● 本地方法是由本地代码(如 C++ 代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。
● synchronized 和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_44757034/article/details/121088666
内容来源于网络,如有侵权,请联系作者删除!