首页 > 编程语言 >Java中的内部类

Java中的内部类

时间:2023-11-16 17:57:16浏览次数:42  
标签:Java 内部 void class static new public

内部类

image

内部类的分类

image

  • 也可以分成两大类
    • 成员内部类(静态内部类、成员内部类)
    • 局部内部类(方法内部类、匿名内部类)

区别

  • 如果定义在方法里面,该类就是为方法内部类或者是局部内部类

  • 如果定义在方法外面,该类就是为成员内部类,如果加上static静态修饰,则该类是为静态内部类

成员内部类

image

案例

public class _181InteriorClass {
    private int age=20;
    public class _181NeiBuLei{
        public void get(){
            System.out.println(age);  //内部类中可以直接访问到 外部类中的成员属性(包括私有)
        }
    }
    public void _181useInterior(){
        _181NeiBuLei neiBuNei=new _181NeiBuLei();
        neiBuNei.get();
    }
}

测试及结果

public class _181Test {
    public static void main(String[] args) {
        _181InteriorClass interior=new _181InteriorClass();
        interior._181useInterior();

        //在外界想直接访问内部类
        //格式:外部类.内部类    new 外部类().new 内部类();
        //一般在企业实际开发中 外界不能直接访问内部类,内部类应该为私有的
        _181InteriorClass._181NeiBuLei neiBuNei = new _181InteriorClass().new _181NeiBuLei();
        neiBuNei.get();
    }
}

image

静态内部类

image

案例

public class _183StaticInterior {

    private static int code=200;
    public static void show(){ //要想在内部类中访问外部类的成员,必须加上静态static
        System.out.println("外部类中的show()方法");
    }

    public static class _183NeiBULei{
        public void get(){
            show();
            System.out.println("静态内部类中的方法");
            System.out.println(code);
        }
    }
    /**
     * 在我们内部类.外部类 中的静态方法,如果访问内部类
     * 则该内部类 必须是为静态
     */
    public static void main(String[] args){  //主方法中有static
        _183NeiBULei neiBULei=new _183NeiBULei();
    }
}

测试及运行结果

public class _183Test {
    public static void main(String[] args) {
        //外界如果访问 静态内部类,new 外部类.内部类()
        _183StaticInterior._183NeiBULei neiBULei=new _183StaticInterior._183NeiBULei();
        neiBULei.get();
    }
}

image

局部内部类

image

案例

public class _184LocalInterior {
    private int code=200;
    private int age=20;
    /**
     * 在方法里面定义的内部类 就是为 局部内部类(方法内部类)
     */
    public void localInterior(){
        class  _184NeiBuLei{ //局部内部类(方法内部类)
            public void neiBuLei(){
                System.out.println("我是局部内部类的方法");
                System.out.println(code);
                System.out.println(age);
                show();  //内部类中能调用外部类中的成员
            }
        }
        _184NeiBuLei neiBuLei=new _184NeiBuLei();
        neiBuLei.neiBuLei();
    }
    private void show(){
        System.out.println("外部类中的show方法");
    }
    //报错,局部内部类 只能在该方法里面访问 不能够在外界(方法外面)访问
    /*public void show(){
        _184NeiBuLei neiBuLei=new _184NeiBuLei();
        neiBuLei.neiBuLei();
    }*/
}

测试及运行结果

public class _184Test {
    public static void main(String[] args) {
        _184LocalInterior localInterior=new _184LocalInterior();
        localInterior.localInterior();
    }
}

image

匿名内部类

image

匿名内部类:new 接口或者抽象类,其实在Java编译阶段(运行程序时)。底层是自动帮我们创建了实现类,实现了该接口或者创建了子类继承了抽象类。

匿名接口

public interface _185AnonymousInterior {
    void jiekou();
}

匿名抽象类

public abstract class _185AbstrctInterior {
    public abstract void AbstrctClass();
}

测试及运行结果

public class _185Test {
    public static void main(String[] args) {
        //匿名内部类  就不需要创建实现类了
        _185AnonymousInterior anonymousInterior =new _185AnonymousInterior() {
            //重写了  接口中的方法
            @Override
            public void jiekou() {
                System.out.println("我是匿名内部类的接口方法");
            }
        };
        anonymousInterior.jiekou();
        /**
         *使用我们的匿名内部类 就不需要创建我们的实现类和子类
         * 直接通过new 内部类的形式 简化不需要创建 实现类和子类
         * 一般用于函数接口
         */
        //new出来的抽象类,底层实际上创建了我们的子类
         _185AbstrctInterior  abstrctInterior=new _185AbstrctInterior(){
             @Override
             public void AbstrctClass(){
                 System.out.println("我是匿名内部类的抽象类方法");
             }
         };
         //使用匿名内部类 是可以直接不需要写实现的
        abstrctInterior.AbstrctClass();
    }
}

image

标签:Java,内部,void,class,static,new,public
From: https://www.cnblogs.com/jiefei6658/p/17836888.html

相关文章

  • 解决umi 不是内部或外部命令,也不是可运行程序问题
    https://www.pianshen.com/article/93281659914/https://blog.csdn.net/calm_encode/article/details/107640909......
  • JavaScript判断图片是否已经加载完毕的方法汇总_javascript技巧
    在网上有很多关于判断图片是否已经加载完毕的文章,但是有的浏览器并不适合,下面小编给大家分享一些有关JavaScript判断图片是否已经加载完毕方法汇总,具体内容如下所示:一.onload事件通过监听图片的onload事件,可以判断图片是否已经加载完成,兼容所有的浏览器(w3c推荐方法),代码示例如下......
  • Java登陆第八天——SQL之DCL
    SQL语句SQL概括起来可以分为以下四组。(都是SQL,因为功能的不同,为了更好学习划分了类别)DDL——数据定义语言。用于定义数据的结构。指的是增,删,改数据库DML——数据操作语言。用于检索或修改数据。指的是增,删,改数据DQL——数据查询语言。用于查询各种形式的数据。指的是查询......
  • 微服务 在 Java 代码中发送 http 请求(跨服务远程调用)
    1.注册RestTemplate对象到Spring容器中(Bean的注入只能放在配置类里,而启动类本身就是配置类)@SpringBootApplicationpublicclassOrderServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderServiceApplication.class,......
  • Java获取笔记本的wifi地址
    几个方法说明(来源网络,没有验证)isAnyLocalAddress方法当IP地址是通配符地址时返回true,否则返回false.这个通配符地址对于拥有多个网络接口(如两块网卡)的计算机非常拥有。使用通配符地址可以允许在服务器主机接受来自任何网络接口的客户端连接。IPv4的通配符地址是0.0.0.0.IPv6的通......
  • Java编程小案例
    1.不借助第三者实现两个变量值的交换。packagejava_11_9;importjava.util.Scanner;publicclassNumberSwap{ publicstaticvoidmain(String[]args){ @SuppressWarnings("resource") Scannerscanner=newScanner(System.in); System.out.print("请输入a的值:&q......
  • Java方法05:可变参数
     publicclassDemo03{publicstaticvoidmain(String[]args){Demo03demo03=newDemo03();demo03.test(1);//输出1}publicvoidtest(int...i){System.out.println(i[0]);}}publicclassDemo03{publics......
  • skywalking(二) 实现基于nginx+java服务的全链路数据收集
    实现nginx+jenkins全链路数据追踪1.部署JenkinsIP:10.0.0.941.1安装、配置jenkins#1.安装jdk11aptupdateaptinstall-yopenjdk-11-jdk#2.下载tomcatmdkir/apps&cd/appswgethttps://dlcdn.apache.org/tomcat/tomcat-8/v8.5.93/bin/apache-tomcat-8.5.93.tar.g......
  • java对象类型强转 java将object强转为list对象
    List类型的Object数据需要遍历操作时,需要将Object类型转换为List类型,转换方式如下。/***object转list*@paramobj需要转换的List对象*@paramclazzList中元素的class*@param<T>*@return*/publicstatic<T>List<T>......
  • 初识Java
    Java:一个强大的编程语言欢迎来到我的Java技术博客!在这里,我将分享一些关于Java编程语言的实用信息和教程。在本篇文章中,我们将深入探讨Java的历史、特点、使用场景以及未来发展趋势。一、Java的历史Java起源于Xerox公司在1970年代开发的Star微处理器系统。当时,SunMicrosystems公司......