抽象类和抽象方法
抽象方法
- 使用
abstract
关键字修饰的没有方法体的方法称为抽象方法。 - 抽象方法必须在子类中被实现,否则子类也需要声明为抽象类。
- 包含抽象方法的类称为抽象类。
- 抽象类不能被实例化,不能通过
new
关键字创建对象。
抽象类的特点
- 抽象类可以包含属性、方法以及构造方法。
- 构造方法不能通过
new
直接实例化抽象类,只能由子类继承。 - 抽象类只能被继承,不能直接实例化。
- 抽象方法必须在子类中被实现,除非子类也声明为抽象类。
示例代码:抽象类与抽象方法
abstract class Animal {
// 抽象方法:子类必须实现
abstract void sound();
// 普通方法
void sleep() {
System.out.println("This animal is sleeping.");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Bark");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound(); // 输出:Bark
dog.sleep(); // 输出:This animal is sleeping.
}
}
内部类
在 Java 中,内部类是定义在另一个类内部的类。与普通类不同,内部类可以访问外部类的成员(包括私有成员),并且可以通过外部类的对象来创建和使用。内部类主要有以下几种类型:
- 成员内部类
- 静态内部类
- 局部内部类(方法内部类)
- 匿名内部类
为什么要使用内部类
-
逻辑上更紧密:内部类能够将相关的类组织在一起,使得类的结构更具层次性,增强代码的封装性。
-
访问外部类的成员:内部类可以直接访问外部类的成员,包括私有成员,避免了过多的 getter/setter 方法。
-
增强代码可读性:在某些情况下,内部类能够使代码更简洁、可读性更高,尤其是在回调机制、事件监听等场景中。
-
封装性:内部类可以隐藏在外部类内部,提高封装性,避免外部代码直接访问。
如何使用内部类
1. 成员内部类
成员内部类定义在外部类的成员位置,它可以访问外部类的所有成员(包括私有成员)。
示例代码:成员内部类
class OuterClass {
private String outerField = "外部类的私有成员";
class InnerClass {
public void display() {
System.out.println("访问外部类的私有成员: " + outerField);
}
}
public void createInnerClass() {
InnerClass inner = new InnerClass(); // 创建内部类对象
inner.display();
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.createInnerClass(); // 调用外部类的方法创建并使用内部类
}
}
输出:
访问外部类的私有成员: 外部类的私有成员
2. 静态内部类
静态内部类是一个静态的类,它只能访问外部类的静态成员,不能访问外部类的实例成员。
示例代码:静态内部类
class OuterClass {
private static String staticOuterField = "外部类的静态成员";
static class StaticInnerClass {
public void display() {
System.out.println("访问外部类的静态成员: " + staticOuterField);
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass(); // 创建静态内部类对象
inner.display();
}
}
输出:
访问外部类的静态成员: 外部类的静态成员
3. 匿名内部类
匿名内部类没有类名,通常用于实现接口或继承类的实例。它在声明的同时就进行实例化,并常用于回调、事件监听等场景。
示例代码:匿名内部类
interface Greeting {
void greet();
}
public class Main {
public static void main(String[] args) {
Greeting greeting = new Greeting() { // 匿名内部类实现Greeting接口
@Override
public void greet() {
System.out.println("Hello from anonymous class!");
}
};
greeting.greet();
}
}
输出:
Hello from anonymous class!
总结
内部类是 Java 的一项强大特性,它允许在一个类内部定义其他类,从而增强代码的封装性和组织性。通过内部类,外部类可以更方便地管理和使用其成员,同时使得代码的结构更加清晰。在实际开发中,内部类常用于事件处理、回调、数据封装等场景。
标签:__,部类,Java,进阶,void,成员,class,public,内部 From: https://blog.csdn.net/m0_75262878/article/details/144955187