diff --git a/day11/src/com/inmind/inner_class03/AbstraceClass.java b/day11/src/com/inmind/inner_class03/AbstraceClass.java new file mode 100644 index 0000000..a9598a0 --- /dev/null +++ b/day11/src/com/inmind/inner_class03/AbstraceClass.java @@ -0,0 +1,5 @@ +package com.inmind.inner_class03; + +public abstract class AbstraceClass { + public abstract void method(); +} diff --git a/day11/src/com/inmind/inner_class03/Demo04.java b/day11/src/com/inmind/inner_class03/Demo04.java new file mode 100644 index 0000000..a617056 --- /dev/null +++ b/day11/src/com/inmind/inner_class03/Demo04.java @@ -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(); + + } + +} diff --git a/day11/src/com/inmind/inner_class03/MyInterface.java b/day11/src/com/inmind/inner_class03/MyInterface.java new file mode 100644 index 0000000..a9274f3 --- /dev/null +++ b/day11/src/com/inmind/inner_class03/MyInterface.java @@ -0,0 +1,5 @@ +package com.inmind.inner_class03; + +public interface MyInterface { + void method(); +} diff --git a/day11/src/com/inmind/inner_class03/MyInterfaceImpl.java b/day11/src/com/inmind/inner_class03/MyInterfaceImpl.java new file mode 100644 index 0000000..fd6fe3b --- /dev/null +++ b/day11/src/com/inmind/inner_class03/MyInterfaceImpl.java @@ -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"); + } +} diff --git a/day11/src/com/inmind/inner_class03/NomalClass.java b/day11/src/com/inmind/inner_class03/NomalClass.java new file mode 100644 index 0000000..752727c --- /dev/null +++ b/day11/src/com/inmind/inner_class03/NomalClass.java @@ -0,0 +1,8 @@ +package com.inmind.inner_class03; + +public class NomalClass { + + public void mehtod(){ + System.out.println("普通类的method方法"); + } +}