结论
相同点:
-
都不能被实例化: 抽象类和接口都不能直接创建对象,它们只能被用作其他类的父类或接口。
-
都可以包含抽象方法: 抽象类和接口都可以包含抽象方法,即方法声明但没有具体实现,需要由子类或实现类提供具体实现。
-
都支持多态性: 抽象类和接口都可以通过子类或实现类实现多态性,子类或实现类可以根据需要覆盖抽象方法,实现自己的行为。
不同点:
-
成员变量: 抽象类可以包含实例变量(可以修改),而接口中只能包含常量(无法修改)
-
构造方法: 抽象类有构造方法,接口没有它更像是一种规范
-
继承与实现: 抽象类单继承,接口多实现
总的来说,抽象类更适合用于定义一种通用的结构或行为,并提供默认实现,而接口更适合用于定义一组抽象方法,以及为类提供一种契约。在设计中,抽象类通常用于具有相似特征的一组类之间的代码重用,而接口则用于描述类应该具有的行为特征,提高了代码的灵活性和可扩展性。
什么是抽象类
使用abstract修饰的类:我的理解是,java是一门面向对象的语言,类里面的成员就是来充实这个类的,抽象类就是允许类里面的成员抽象(可以理解为形式上的存在没有实体)的一种特殊的对象,故而捕捉不到实体无法实例化
什么是接口
我的理解是一中特殊的抽象类,一种代码规范思想
抽象内里面可以定义些什么
- 抽象方法
- 普通类里面可以定义的
抽象类里面的抽象方法一定不能使用private进行定义抽象方法(抽象方法都是需要重写的,如何私有化了那怎么重写)
abstract class AbstractClass {
//这是一个抽象类中的抽象方法
abstract void method01();
public String name = "抽象方法";
public void method02(){
System.out.println("抽象方法中的普通方法");
};
//抽象类中的构造方法,可以用来初始化一些成员
public AbstractClass(String name){
this.name = name;
}
public AbstractClass(){
}
}
接口里面可以定义什么
- 抽象方法
- 默认方法
- 静态方法
- 常量
- 内部接口
public interface InterfaceClass {
String name = "我是一个接口中的变量";//静态常量
void getRole();//接口中的抽象方法
public abstract void getRole2();//接口中的成员一般都会省略写修饰符(public abstract)
// 默认方法
default void test() {
System.out.println("我是接口中的默认方法");
}
//静态方法
static void test2() {
System.out.println("我是接口中的默认方法");
}
// 内部接口
interface inside{
void play();
}
}