JavaSE——面向对象高级三(2/5)-匿名内部类(重点)-认识匿名内部类、匿名内部类的应用场景

简介: JavaSE——面向对象高级三(2/5)-匿名内部类(重点)-认识匿名内部类、匿名内部类的应用场景

匿名内部类【重点】

认识匿名内部类

  • 匿名内部类就是一种特殊的局部内部类;所谓匿名:指的是程序员不需要为这个类声明名字

格式

new 类或接口(参数值...){

       类体(一般是方法重写);};

new Animal(){
    @Override
    public void cry(){
    }
};
  • 特点: 匿名内部类本质就是一个子类,并会立即创建出一个子类对象。
  • 作用:用于更方便的创建一个子类对象。

代码具体体现:

public class Test{
    public static void main(String[] args){
        Animal a = new Animal(){
            @Override
            public void cry(){
                System.out.println("喵喵喵地叫~");
            }
        };
        a.cry();
    }
}
 
abstract class Animal{
    public abstract void cry();
}

其效果相当于:

public class Test{
    public static void main(String[] args){
      Animal a = new Cat();
        a.cry();
    }
}
class Cat extends Animal{
     @Override
     public void cry(){
        System.out.println("喵喵喵地叫~");
    }
}
 
abstract class Animal{
    public abstract void cry();
}

匿名内部类的应用场景

  • 通常作为一个参数传输给方法

案例演示

需求:猫、狗参加游泳比赛。

先创建接口,因为是游泳比赛,接口让猫和狗都要去重写他们各自的方法。

public interface Swimming{
    void swim();
}

再设计一个方法,可以接收Swimming接口的一切实现类对象进来参加游泳比赛。

public static void go(Swimming s){
    System.out.println("开始--------------");
    s.swim();
}

最后就可以开始实现了

public class Tset{
    public static void main(String[] args){
        go(); //这里要传参数,而且参数的类型是接口对象
        //所以此时可以直接用匿名内部类作为参数传入。
 
        go(new Swimming(){
            @Override
            public void swim(){
                System.out.println("狗游泳游得飞快");
            }
        });
    }
}

没有直接作为参数传输给方法的话,是这样的:

public class Tset{
    public static void main(String[] args){
        Swimming s1 = new Swimming(){
            @Override
            public void swim(){
            System.out.println("狗游泳游得飞快");
        };
 
        go(s1);
    }
}

匿名内部类大部分时候不是主动去用,而是被动去用的,需要用的时候才用的;一般是调用别人的API时,需要给一个对象,而这个对象正好是接口类型的,那么就知道此时要用匿名内部类了。


1、匿名内部类的书写格式是什么样的?


new 类或接口(参数值...){

       类体(一般是方法重写);

};

(注意要写分号)

new Animal(){
    @Override
    public void cry(){
    }
};

2、匿名内部类有啥特点?

  • 匿名内部类本质就是一个子类,并会立即创建出一个子类对象

3、匿名内部类有啥作用、应用场景?

  • 可以更方便的创建出一个子类对象。
  • 匿名内部类通常作为一个参数传输给方法。

END



目录
相关文章
|
27天前
|
Java 编译器
JavaSE——面向对象基础(2/4)-this关键字、构造器(this的执行原理、应用场景,构造器的特点、应用)
JavaSE——面向对象基础(2/4)-this关键字、构造器(this的执行原理、应用场景,构造器的特点、应用)
19 5
|
2天前
|
Java 程序员
深入理解Java匿名内部类的语法和使用场景
深入理解Java匿名内部类的语法和使用场景
|
27天前
|
Java
JavaSE——面向对象高级一(3/4)-面向对象三大特征之二:继承(初步认识继承、了解继承的好处)
JavaSE——面向对象高级一(3/4)-面向对象三大特征之二:继承(初步认识继承、了解继承的好处)
12 0
|
27天前
|
Java
JavaSE——面向对象高级二(4/4)-接口的其他细节-三个新方法(默认方法、私有方法、静态方法),接口的多继承
JavaSE——面向对象高级二(4/4)-接口的其他细节-三个新方法(默认方法、私有方法、静态方法),接口的多继承
23 0
|
27天前
|
Java 编译器 数据处理
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
29 0
|
27天前
|
设计模式 存储 Java
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
15 0
|
2月前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
26 3
|
2月前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
26 2
|
9月前
|
Java
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
|
12月前
|
IDE Java 开发工具
【JavaSE专栏33】用大白话解释Java的方法重载和方法覆盖
【JavaSE专栏33】用大白话解释Java的方法重载和方法覆盖

热门文章

最新文章