day11-匿名内部类的定义和使用(重点)

This commit is contained in:
2026-05-30 13:44:26 +08:00
parent aa4af28eec
commit 3956c0173d
5 changed files with 122 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
package com.inmind.noname_innerclass08;
public abstract class AbstractClass {
public abstract void method1();
}

View File

@@ -0,0 +1,10 @@
package com.inmind.noname_innerclass08;
public class Animal {
int age;
String name;
public void eat(){
System.out.println("动物要吃吃吃");
}
}

View File

@@ -0,0 +1,94 @@
package com.inmind.noname_innerclass08;
/*
匿名内部类:定义在方法中的一个没有名字的类
之前我们使用的一个类的子类,或者接口的实现类时,必定要先定义.java文件再创建出对象调用方法但是
如果该子类或者实现类只用一次,那么.java文件就有点多余了这时就可以使用匿名内部类
匿名内部类定义:
{
@Override
public void method() {
System.out.println("匿名内部类的method方法被调用了");
}
};
必须跟new 接口名(匿名内部类定义) new 抽象类名匿名内部类定义new 普通类名(匿名内部类定义)后面。
*/
public class Demo06 {
public static void main(String[] args) {
//普通接口的使用
MyInterfaceImpl impl = new MyInterfaceImpl();
impl.method();
//多态的使用:父类引用指向子类对象
MyInterface impl1 = new MyInterfaceImpl();
impl1.method();
//能不能将MyInterfaceImpl.java这个类的定义直接省略掉那就使用匿名内部类
MyInterface impl2 = new MyInterface(){
@Override
public void method() {
System.out.println("匿名内部类中的method方法被调用了");
}
};
impl2.method();
//---------------------------------------------------
//抽象父类的匿名内部类
// 使用AbstractClass但是不定义出它的子类的java文件使用匿名内部类
AbstractClass ac = new AbstractClass(){
@Override
public void method1() {
System.out.println("匿名内部类子类实现了抽象父类的method1方法");
}
};
ac.method1();
//-----------------------------------------------------
//普通类的匿名内部类
Animal dog = new Animal(){
@Override
public void eat() {
System.out.println("狗吃骨头");
}
};
dog.eat();
//匿名内部类和匿名对象
//new Scanner(System.in).nextInt();//匿名对象
/*
new MyInterface(){
@Override
public void method() {
System.out.println("匿名内部类中的method方法被调用了");
}
} 是匿名对象
{
@Override
public void method() {
System.out.println("匿名内部类中的method方法被调用了");
}
}是匿名内部类
*/
new MyInterface(){
@Override
public void method() {
System.out.println("匿名内部类中的method方法被调用了");
}
}.method();
}
public void method(){
}
}

View File

@@ -0,0 +1,5 @@
package com.inmind.noname_innerclass08;
public interface MyInterface {
void method();
}

View File

@@ -0,0 +1,8 @@
package com.inmind.noname_innerclass08;
public class MyInterfaceImpl implements MyInterface{
@Override
public void method() {
System.out.println("MyInterfaceImpl类中的method方法被调用了");
}
}