没有名字的内部类

    创建某个类(接口)的子类对象
    步骤1:定义带名字的类
    步骤2:创建对象

    意义:
    匿名内部类是创建某个类型子类的快捷方式 - 语法简单
    我们临时定义的一个类的子类,并且创建这个子类的对象而使用的匿名内部类

    优点:
    1.节省代码量
    2.一次性的

    格式:
    new 父类(){
    重写父类的方法
    }

    匿名内部类在以后的用法很多,暂时熟悉语法

    父类:

    1. /**
    2. *
    3. * 父类 - 抽象类
    4. * 吃饭,睡觉的方法
    5. */
    6. package Test14_Demo.Demo09;/*
    7. @create 2020--12--02--16:16
    8. */
    9. public abstract class Animal {
    10. public abstract void eat();
    11. public abstract void sleep();
    12. }

    子类:

    1. /**
    2. *
    3. * 实现类 - 子类
    4. *
    5. * 定义子类的方法,重写父类的方法
    6. */
    7. package Test14_Demo.Demo09;/*
    8. @create 2020--12--02--16:17
    9. */
    10. public class Dog extends Animal{
    11. @Override
    12. public void eat() {
    13. System.out.println("啃骨头");
    14. }
    15. @Override
    16. public void sleep() {
    17. System.out.println("睡狗窝");
    18. }
    19. }

    测试类:

    1. package Test14_Demo.Demo09;/*
    2. @create 2020--12--02--16:12
    3. */
    4. public class AnonymousInnerClassDemo {
    5. public static void main(String[] args) {
    6. //使用有类名的子类(多态的使用) - 父类的引用指向子类的对象
    7. Animal animal = new Dog();
    8. animal.eat();
    9. animal.sleep();
    10. System.out.println("-------------------------");
    11. //使用匿名内部类的方式实现 - 创建了一个子类
    12. Animal a = new Animal() {
    13. @Override
    14. public void eat() {
    15. System.out.println("吃草");
    16. }
    17. @Override
    18. public void sleep() {
    19. System.out.println("站着睡");
    20. }
    21. };
    22. //使用匿名内部类的方法
    23. a.eat();
    24. a.sleep();
    25. //只是看语法,这个匿名内部类是用来实现线程的 - 系统中直接拿过来用的
    26. Thread t = new Thread(){
    27. public void run() {
    28. }
    29. };
    30. }
    31. }