成员变量
- 抽象类:可以拥有各种访问修饰符(private、protected、public 等)的成员变量,包括实例变量和静态变量,这些变量可以有初始值,也可以在后续代码中进行赋值。例如:
abstract class AbstractClass {
private int privateVar = 10;
protected String protectedVar;
public static final double PI = 3.14;
}
- 接口:成员变量默认都是
public static final
的,即全局常量,必须在声明时就进行赋值,且赋值后不可更改。例如:
interface MyInterface {
int DEFAULT_VALUE = 0;
}
方法定义
- 抽象类:可以包含抽象方法和具体方法。抽象方法只有方法声明,没有方法体,必须由子类实现;具体方法有完整的方法体,子类可以继承也可以重写。例如:
abstract class AbstractClass {
// 抽象方法
public abstract void abstractMethod();
// 具体方法
public void concreteMethod() {
System.out.println("This is a concrete method.");
}
}
- 接口:接口中的方法默认都是
public abstract
的(Java 8 之前),只包含方法声明,没有方法体,必须由实现接口的类来实现。从 Java 8 开始,接口可以有默认方法(使用 default
关键字修饰)和静态方法,默认方法提供了方法的默认实现,实现类可以选择重写;静态方法属于接口本身,通过接口名调用,不需要实现类实例。例如:
interface MyInterface {
void abstractMethod();
default void defaultMethod() {
System.out.println("This is a default method.");
}
static void staticMethod() {
System.out.println("This is a static method.");
}
}
继承与实现关系
- 抽象类:一个类只能继承一个抽象类。继承抽象类的子类必须实现抽象类中的所有抽象方法,除非子类本身也是抽象类。例如:
abstract class AbstractClass {
public abstract void abstractMethod();
}
class SubClass extends AbstractClass {
@Override
public void abstractMethod() {
System.out.println("Implementation of abstract method.");
}
}
- 接口:一个类可以实现多个接口。实现接口的类必须实现接口中的所有抽象方法(除非该类是抽象类)。接口还可以继承其他接口,并且可以多继承。例如:
interface Interface1 {
void method1();
}
interface Interface2 {
void method2();
}
interface Interface3 extends Interface1, Interface2 {
void method3();
}
class ImplementingClass implements Interface3 {
@Override
public void method1() {
System.out.println("Implementation of method1.");
}
@Override
public void method2() {
System.out.println("Implementation of method2.");
}
@Override
public void method3() {
System.out.println("Implementation of method3.");
}
}