匿名内部类 是一种特殊的内部类,它没有显式的类名,而是在创建对象时直接定义和实例化一个类。
匿名内部类的主要用途是实现接口或继承抽象类,它允许在创建对象的同时编写类的定义和实现接口或抽象方法。由于匿名内部类没有名字,因此它只能在创建对象时使用,并且无法被重用。
匿名内部类的格式如下:
new 父类构造器(参数列表)|实现接口(参数列表){
//匿名内部类的类体部分
}
java
package com.jsu.java;
public interface Action {
public abstract void study();
}
java
package com.jsu.java;
public abstract class Person {
//私有数据成员
private String name;
private int age;
//构造方法
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//setter,getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//抽象方法
public abstract void say();
}
java
package com.jsu.java;
public class Student extends Person{ //继承
public Student() {
}
public Student(String name, int age) {
super(name, age);
}
@Override //覆写person类的中的抽象方法
public void say() {
System.out.println("姓名:" + getName() + ",年龄:" + getAge());
}
}
java
package com.jsu;
import com.jsu.java.Action;
import com.jsu.java.Person;
import com.jsu.java.Student;
public class Demo001 {
public static void main(String[] args) {
Demo001.fun1( //匿名内部类,实现了接口
new Action(){
public void study() {//实现了接口的抽象方法
System.out.println("正在勤奋学习!!!");
}
}
);
Person swk = new Student("美猴王",18);//父类型引用实例化子类型对象
Demo001.fun2(swk);
Demo001.fun2( //匿名内部类做参数
new Person("沈括",58) {
public void say() { //实现抽象类的Person的抽象方法
System.out.println("匿名内部类的say:姓名:" + getName() + ",年龄:" + getAge());
}
}
);
}
public static void fun1(Action action) { //接口作参数
action.study();
}
public static void fun2(Person person) { //抽象类作参数
person.say();
}
}
结果展示 :