day11-匿名内部类的定义和使用【重点】
This commit is contained in:
@@ -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方法");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user