day11-匿名内部类的定义和使用【重点】

This commit is contained in:
2026-07-28 11:22:06 +08:00
parent b718d1bc75
commit b574ec00d5
5 changed files with 93 additions and 0 deletions
@@ -0,0 +1,5 @@
package com.inmind.inner_class03;
public abstract class AbstraceClass {
public abstract void method();
}
@@ -0,0 +1,65 @@
package com.inmind.inner_class03;
/*
匿名内部类:定义在方法中的一个没有名字的类(属于局部内部类的一种),它的本质是一个父类或者接口的子类或实现类
匿名内部类的定义:
{
int i;
int j;
@Override
public void method() {
System.out.println("实现类实现了抽象方法");
}
}
为什么要用匿名内部类???
我们之前直接定义一个源文件(.java文件),实现一个接口,再创建实现类对象,调用方法就结束了,
如果这个类只使用一次,太浪费类的定义,那么我们就可以定义一个匿名内部类。
匿名内部类总结:
必须跟new 接口名(){匿名内部类的定义};
new 抽象类(){匿名内部类的定义};
new 非final修饰的类(){匿名内部类的定义}
*/
public class Demo04 {
public static void main(String[] args) {
//接口的普通用法,创建实现类对象
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.method();
//接口的多态用法(父接口引用指向实现类对象)
MyInterface myInterface = new MyInterfaceImpl();
myInterface.method();//编译看左边,运行看右边
System.out.println("-----------------------------------");
//能不能将MyInterfaceImpl.java省略掉,那就用匿名内部类
//由于匿名内部类是没有类名的!!!所以只能使用多态写法
//第一种:接口的匿名内部类
MyInterface myInterface1 = new MyInterface(){
//当前既是匿名内部类,也是MyInterface的实现类
@Override
public void method() {
System.out.println("匿名内部类【实现类】实现了抽象方法method");
}
};
myInterface1.method();//打印的内容是匿名内部类【实现类】实现了抽象方法method
//第二种:抽象父类的匿名内部类
AbstraceClass ac = new AbstraceClass(){
//当前既是匿名内部类,也是AbstraceClass的子类
@Override
public void method() {
System.out.println("匿名内部类重写抽象父类的抽象方法method");
}
};
ac.method();
//第三种:普通类的匿名内部类
NomalClass nc = new NomalClass(){
@Override
public void mehtod() {
System.out.println("子类重写了父类的method方法");
}
};
nc.mehtod();
}
}
@@ -0,0 +1,5 @@
package com.inmind.inner_class03;
public interface MyInterface {
void method();
}
@@ -0,0 +1,10 @@
package com.inmind.inner_class03;
//实现类的定义
public class MyInterfaceImpl implements MyInterface{
int i;
int j;
@Override
public void method() {
System.out.println("实现类实现了抽象方法method");
}
}
@@ -0,0 +1,8 @@
package com.inmind.inner_class03;
public class NomalClass {
public void mehtod(){
System.out.println("普通类的method方法");
}
}