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



目录
相关文章
|
6月前
|
存储 Java 编译器
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
84 3
|
5月前
|
Java 编译器
JavaSE——面向对象基础(2/4)-this关键字、构造器(this的执行原理、应用场景,构造器的特点、应用)
JavaSE——面向对象基础(2/4)-this关键字、构造器(this的执行原理、应用场景,构造器的特点、应用)
34 5
|
5月前
|
存储 Java 程序员
JavaSE——面向对象基础(1/4)-面向对象编程、程序中的对象、对象的产生、对象的执行原理、类和对象的一些注意事项
JavaSE——面向对象基础(1/4)-面向对象编程、程序中的对象、对象的产生、对象的执行原理、类和对象的一些注意事项
51 7
|
6月前
|
Java
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
38 0
|
6月前
|
Java 编译器 开发者
【Java构造方法】构造方法重载,缺省构造器,案例,使用方法及重要知识点
【Java构造方法】构造方法重载,缺省构造器,案例,使用方法及重要知识点
|
Java
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
85 0
java学习第十三天笔记-面向对象249-继承中成员方法和成员变量的特点-利用方法的重写去设计继承结构
|
Java 编译器 数据安全/隐私保护
Java——内部类(概念理解+应用举例)
Java——内部类(概念理解+应用举例)
Java——内部类(概念理解+应用举例)
|
Java 数据安全/隐私保护 Python
Java类的概念|包括封装、继承、多态|以及成员方法、权限修饰符、this关键字等类的相关的概念知识|Java必学知识点
继承的图形化概念:用最形象的图像来说明继承的概念其实很简单,就拿三角形和等腰三角形和等边三角形来说 等腰三角形和等边三角形都具有三角形的性质就是三个角三条边,那么三角形就是父类,等腰三角形和等边三角形就是三角形的子类,然而等边三角形是特殊的等腰三角形,所以在等腰三角形和等边三角形两者之间,等腰三角形是父类,等边三角形是子类!
193 0
Java类的概念|包括封装、继承、多态|以及成员方法、权限修饰符、this关键字等类的相关的概念知识|Java必学知识点
|
Java
java构造方法详解(构造器)附代码例子
构造器就是在创建对象的时候给成员变量进行初始化赋值的。
268 0
Java——抽象类(abstract)(概念理解+应用举例)
Java——抽象类(abstract)(概念理解+应用举例)
Java——抽象类(abstract)(概念理解+应用举例)