局部内部类、匿名内部类、私有内部类

这篇具有很好参考价值的文章主要介绍了局部内部类、匿名内部类、私有内部类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有关于内部类的讲解,见此篇java内部类的创建
下面分别将讲解局部内部类、匿名内部类、私有内部类。

1. 局部内部类

可以在方法中定义内部类,甚至在语句块中也可以定义内部类,
这种情况通常是某个方法需要创建一个类来辅助完成该方法的功能,而这个类只用在该方法中。
局部内部类需要配合接口来一起使用。

interface Speaker {
    void speak();
}

class LocalInnerClass {

    Speaker getSpeaker(String str) {
        class MySpeaker implements Speaker {
            @Override
            public void speak() {
                System.out.println(str);
            }
        }

        return new MySpeaker();
    }
}

public class App {
    public static void main(String[] args) {
        LocalInnerClass li = new LocalInnerClass();
        li.getSpeaker("good").speak();
    }
}

局部内部类限定了该类只能在局部作用域内被访问,因此是无法直接返回该类型的对象的,需要向上转型为其实现的接口类型。因此,局部内部类不能使用public和private进行声明。

2. 匿名内部类

Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。
主要是用于在我们需要的时候创建一个对象来执行特定的任务,可以使代码更加简洁。
匿名类是不能有名字的类,它们不能被引用,只能在创建时用 new 语句来声明它们。
匿名类语法格式:

class outerClass {

        // 定义一个匿名类
        object = new Type(parameterList) {
             // 匿名类代码
        };
    }

以上的代码创建了一个匿名类对象 object,匿名类是表达式形式定义的,所以末尾以分号;来结束
匿名类通常继承一个父类或实现一个接口。一旦掌握了匿名的内部类,可以让你的代码更加简洁清晰,匿名内部类一定是一个实现某个接口或者继承某个类的类,所以我们必须在使用匿名内部类之前定义一个接口或类。

/* 1. 匿名类继承一个父类 */
class Polygon {
    public void display() {
        System.out.println("在 Polygon 类内部");
    }
}
class AnonymousClass {
    public void createClass() {

        // 创建匿名类并继承Polygon类
        Polygon p1 = new Polygon() {
            @Override
            public void display() {
                System.out.println("我是匿名类,继承自Polygon类。");
            }
        };

        p1.display();
    }
}

/* 2. 匿名类实现一个接口 */
interface Student {
    void show();
}
interface Singer {
    void sing();
}

class AnonymousClassDemo {

    public void createClass() {
        // 创建匿名类并实现一个接口
        Student su = new Student() {
            @Override
            public void show() {
                System.out.println("我是匿名类,实现了Student接口。");
            }
        };
        su.show();
    }

    public Singer getSinger() {
        return new Singer() {
            @Override
            public void sing() {
                System.out.println("我是匿名类,实现了Singer接口。");
            }
        };
    }

}

class App {
    public static void main(String[] args) {
        AnonymousClass demo1 = new AnonymousClass();
        demo1.createClass();

        AnonymousClassDemo demo2 = new AnonymousClassDemo();
        demo2.createClass();
        demo2.getSinger().sing();
    }
}

3. 私有内部类

内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符。文章来源地址https://www.toymoban.com/news/detail-420791.html

class PrOuterClass {
    int num1 = 10;

    private class PrInnerClass {
        int num2= 20;
    }
}
 // 企图在外部创建私有类,错误
 PrOuterClass pOuter = new PrOuterClass();
 PrOuterClass.PrInnerClass pInner = pOuter.new PrInnerClass();     // error

到了这里,关于局部内部类、匿名内部类、私有内部类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java成员类(内部类、匿名内部类)

    Java 中内部类指的是声明在一个类内部的类,它可以访问外部类的私有变量和方法,而外部类不能直接访问内部类的成员。内部类的主要作用是为外部类提供一种封装和组织代码的方式。 内部类可以解决Java类单继承的问题,因为内部类和外部类可以相互访问。 成员内部类(

    2024年02月11日
    浏览(37)
  • Java 匿名内部类

    在 Java 中,匿名内部类是一种可以在创建对象时直接定义内部类的方式,而不需要单独定义一个类。它通常用于创建实现某个接口或继承某个类的对象。 Java 匿名内部类是一种可以在创建对象时直接定义内部类的方式,而不需要单独定义一个类。它通常用于创建实现某个接口

    2024年02月07日
    浏览(37)
  • Java匿名内部类

    Java中的匿名内部类是一种可以在声明时直接创建对象的内部类。这种内部类没有名字,通常用来简化代码,特别是在定义事件处理程序和监听器方面非常有用。 需要注意的是,匿名内部类不能有构造函数,因为它没有名字。同时,匿名内部类可以访问外部类的成员变量和方

    2024年02月10日
    浏览(34)
  • 内部类和匿名类

    目录 一、内部类 1.数据访问 2.静态内部类  二、内部类和外部类区别 1.访问修饰符: 2.static修饰: 3.使用: 三、匿名类  PS:小练习 一、内部类 内部类是指将一个类定义在另一个里面。 内部类分为static内部类和普通内部类。 这个内编译后会产生两个.class文件,分别是A.clas

    2024年02月11日
    浏览(39)
  • 【Java基础】匿名内部类

    🎊专栏【Java基础】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The truth that you leave】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🎁什么是匿名内部类 🎁为什么要使用匿名内部类 🎁详细解释 🏳️‍🌈不使用匿名内部类 🏳️‍🌈使

    2024年02月05日
    浏览(44)
  • 匿名内部类

    匿名内部类是局部内部类的一种简化形式.本质上是一个对象,是实现了该接口或继承了该抽象类的子类对象. 语法格式:    new 类名或者接口名(){        重写方法;    } ; 给匿名内部类名命: 虽然这是匿名内部类,但是仍然可以利用多态来给匿名内部类名命的哈! 匿名内部类

    2024年02月01日
    浏览(43)
  • 【Java】匿名内部类开发使用场景

    使用前面创建子类或者实现类的方式来编写代码,如下: AnimalParent.java Dog.java Cat.java Test.java 问题:上述代码如果有很多的子类,要创建很多子类,还要继承 重写父类的抽象方法 解决:使用匿名内部类(不需要创建子类或者实现类) AnimalParent.java Test.java 上述代码使用的匿名

    2024年02月07日
    浏览(37)
  • 【C++】友元、内部类和匿名对象

    💗个人主页💗 ⭐个人专栏——C++学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 1. 友元 1.1 友元函数 1.2 友元类 2. 内部类 2.1 成员内部类 2.2 局部内部类 3. 匿名对象 3.1 基本概念 3.1 隐式转换 友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏

    2024年02月21日
    浏览(38)
  • 重生之我要学C++第七天(匿名对象、内部类)

    这篇文章主要内容是构造函数的隐式类型转化、匿名对象、内部类。希望对大家有所帮助。 更多优质内容跳转: ​​​​​​专栏:重生之C++启程(文章平均质量分93) 目录 构造函数的隐式类型转化 1.单参数构造函数隐式类型转换 2.多参数构造函数隐式类型转换 匿名对象 内部

    2024年02月13日
    浏览(38)
  • Lambda表达式和匿名内部类的区别

    匿名内部类:可以是接口,也可以是抽象类,还可以是具体类 Lambda表达式:只能是接口 如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式 匿名内部类:编译之后,产

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包