内部类
内部类(Inner Class)是定义在另一个类内部的类。
Java 提供内部类的主要目的是为了更好地将类逻辑封装在一起,增强代码的可读性和维护性。根据其定义的位置和特性,内部类可以分为以下几种类型:
- 静态内部类
- 成员内部类
- 局部内部类
静态内部类
使用 static
修饰。它不能直接访问外部类的非静态成员,只能访问外部类的静态成员。
java
public static void main(String[] args) {
Person.Dog dog = new Person.Dog();
dog.eat(); //篮球
}
class Person {
static String hobby = "篮球";
//静态成员内部类
static class Dog {
public void eat() {
System.out.println("name = " + Person.hobby);
}
}
}
成员内部类
定义在类的内部,且不带 static
修饰符。它可以访问外部类的所有成员(包括私有成员)。
java
public static void main(String[] args) {
Person person = new Person();
Person.Cat cat = person.new Cat();
cat.eat();
cat.show("王一博");
}
class Person {
String name = "Person";
int age = 10;
//非静态成员内部类
class Cat {
String name = "Cat";
public void show(String name) {
System.out.println("age = " + age); //10
System.out.println("name = " + name); //王一博
System.out.println("name = " + this.name); //Cat
System.out.println("name = " + Person.this.name);//Person
}
}
}
局部内部类
定义在方法、构造器或代码块中,其作用域仅限于定义它的块中。
java
class Person {
//方法中
public void method() {
class A {
}
}
//构造器中
public Person() {
class B {
}
}
//代码块中
{
class C {
}
}
}
使用场景
注意
要学会看 匿名内部类 的声明和使用方式,实际开发的时候可能会用到的!
java
class InnerClass {
public Comparable comparable() {
//方式一:接口实现类的实名对象(标准写法)
class MyComparable implements Comparable {
@Override
public int compareTo(Object o) {
return 0;
}
}
MyComparable myComparable = new MyComparable();
return myComparable;
//方式二:接口实现类的匿名对象
class MyComparable implements Comparable {
@Override
public int compareTo(Object o) {
return 0;
}
}
return new MyComparable();
//方式三:接口匿名实现类的实名对象
Comparable comparable = new Comparable() {
@Override
public int compareTo (Object o){
return 0;
}
};
return comparable;
//方式四:接口匿名实现类的匿名对象
return new Comparable() {
@Override
public int compareTo(Object o) {
return 0;
}
};
}
}