【JavaSE】抽象类和接口和内部类
在Java中,抽象类和接口是两种不同的抽象方式,它们有各自的特点和用途。
抽象类(Abstract Class):
- 抽象类不能被实例化。
- 抽象类可以包含抽象方法和非抽象方法。
- 继承一个抽象类的子类必须实现抽象类中的所有抽象方法,除非它自己也被声明为抽象类。
接口(Interface):
- 接口不能包含方法的实现。
- 类可以实现一个或多个接口。
- 实现接口的类必须实现接口中所有的抽象方法。
内部类(Inner Class):
- 内部类提供了更好的封装,可以让外部类的实例与内部类的实例 part-of 关系。
- 内部类可以访问外部类的私有成员。
- 内部类可以是静态的,也可以是非静态的。
以下是一个简单的例子,展示了如何使用这些概念:
// 抽象类
abstract class Animal {
abstract void makeSound();
void sleep() {
System.out.println("Zzz");
}
}
// 实现抽象类
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Woof");
}
}
// 接口
interface Eatable {
void eat();
}
// 内部类
class Plate {
private int size;
class PlateContent implements Eatable {
private String content;
public PlateContent(String content) {
this.content = content;
}
@Override
public void eat() {
System.out.println("Eating " + content + " on a " + size + "-inch plate.");
}
}
public Plate(int size) {
this.size = size;
}
public PlateContent createContent(String content) {
return new PlateContent(content);
}
}
public class Main {
public static void main(String[] args) {
// 使用抽象类
Animal dog = new Dog();
dog.makeSound();
dog.sleep();
// 使用接口
Eatable plateContent = new Plate(10).createContent("cheese");
plateContent.eat();
}
}
这个例子中,Animal
是一个抽象类,Dog
是它的一个实现。Eatable
是一个接口,PlateContent
是一个内部类,它实现了Eatable
接口。在main
方法中,我们创建了Animal
的实例和Eatable
的实例,展示了这些概念的使用。
评论已关闭