内部类、匿名内部类
内部类
内部类是指定义在另一个类的内部的类。内部类可以访问其外部类的私有成员,包括私有方法和私有变量。
内部类的作用:
1、封装:内部类可以访问外部类的私有成员,因此可以使用内部类来封装实现细节,隐藏对外部的访问。
2、代码组织:内部类可以把相关的代码组织在一起,提高代码的可读性和维护性。
3、回调和事件处理:内部类可以用作回调和事件处理程序,因为它们可以访问外部类的成员并且可以访问外部类的对象。
匿名内部类
匿名内部类是一个没有名字的内部类。它通常用于创建一个实现某个接口或抽象类的对象,或者创建一个只有一种方法的类的对象。匿名内部类可以直接实现一个接口或抽象类的方法,并且可以在一行代码中创建对象并初始化其成员变量。
public class AnonymousInnerClass {
public static void main(String[] args) {
Greeting greeting = new Greeting() {
@Override
public void sayhello() {
System.out.println("hello!");
}
};
greeting.sayhello(); //hello!
}
}
interface Greeting {
void sayhello();
}
接口中的方法必须全部实现
public class AnonymousInnerClass {
public static void main(String[] args) {
Greeting greeting = new Greeting() {
@Override
public void sayhello() {
System.out.println("hello!");
}
@Override
public void sayBye() {
System.out.println("bye!");
}
};
greeting.sayhello(); //hello!
greeting.sayBye(); //bye!
}
}
interface Greeting {
void sayhello();
void sayBye();
}
实现类中特定的方法
public class ClassAnonymousInnerClass {
public static void main(String[] args) {
Person person = new Person() {
@Override
void sayMyName() {
System.out.println("no no");
}
// @Override
// void sayMyAge() {
// System.out.println("yes yes");
// }
};
person.sayMyName(); //no no
person.sayMyAge(); //我十一岁
}
}
class Person {
public Person() {
}
void sayMyName() {
System.out.println("我的名字是jack");
}
void sayMyAge() {
System.out.println("我十一岁");
}
}