抽象类(Abstract Class)
定义
抽象类是一个不能被实例化的类,用于作为其他类的基类。它可以包含抽象方法和非抽象方法,用于定义子类必须实现的行为和共享的功能。
声明语法
public abstract class AbstractClassName {
// 抽象方法声明
public abstract void abstractMethod();
// 非抽象方法的实现
public void nonAbstractMethod() {
// 方法实现
}
}
特点和用法
- 抽象类用于作为其他类的模板,定义了子类必须实现的抽象方法。
- 抽象类可以包含非抽象方法,这些方法可以由子类继承或重写。
- 抽象类不能被实例化,只能作为父类被继承。
- 子类必须实现抽象类中的所有抽象方法,除非子类本身也是抽象类。
接口(Interface)
定义
接口是一种定义了一组抽象方法的引用类型。它提供了一种定义类之间的契约的方式,通过实现接口,类可以遵循接口定义的方法。
声明语法
public interface InterfaceName {
// 抽象方法声明
void abstractMethod();
// 默认方法实现
default void defaultMethod() {
// 方法实现
}
// 静态方法
static void staticMethod() {
// 方法实现
}
}
特点和用法
- 接口定义了一组抽象方法,但不能包含实例变量。
- 类通过实现接口来遵循接口所定义的契约,实现接口的类必须实现接口中的所有抽象方法。
- 接口可以包含默认方法和静态方法的实现(jdk1.8之后)。
- 类可以实现多个接口,实现多重继承的效果。
- 接口可以被其他接口扩展,形成接口的继承关系。
内部类(Inner Class)
定义
内部类是定义在其他类内部的类。它可以访问外部类的成员,并且可以用于实现封装和组织代码的目的。
声明语法
public class OuterClass {
// ...
public class InnerClass {
// ...
}
// 静态内部类
public static class StaticInnerClass {
// ...
}
// 方法内部类
public void methodWithLocalInnerClass() {
class LocalInnerClass {
// ...
}
}
}
特点和用法
- 内部类可以访问外部类的成员,包括私有成员。
- 内部类提供了一种实现细粒度封装和组织代码的方式。
- 非静态内部类与外部类实例绑定,可以访问外部类的实例变量和方法。
- 静态内部类与外部类实例无关,它的行为类似于普通类,但可以访问外部类的静态成员。
- 方法内部类是定义在方法内部的类,它只能在方法内部访问,并且不能定义静态成员。