内部类最通俗易懂_寒笑半步巅的博客-程序员秘密

技术标签: java  javase  

内部类详解

如果一个事物内部包含另一个事物,就是一个类中包含着其他类。

**例如:**身体和心脏的关系,汽车和发动机的关系。。。

分类:

  1. 成员内部类 public /protected/(default)/private
  2. 局部内部类(匿名内部类)无访问修饰符

1、成员内部类

package com.hanxiao.inner;

public class Body {
    
    
    private String name;
    
    public class Hert{
    
        public void beat(){
    
            System.out.println("心脏跳动:beng ,beng ,beng !");
            System.out.println("我是: "+ name);
        }
    }
    
    public void methodBody(){
    
        System.out.println("外部类的方法");
        Hert hert = new Hert();
        hert.beat();
    }
}

class Test{
    
    public static void main(String[] args) {
    
        // 1.间接使用:通过外部类中的方法new内部类对象调用
       	Body body = new Body();
        body.methodBody();
        System.out.println("===========");
        //2.直接使用:外部类名称.内部类名称  对象名 = new 外部类名().new 内部类名()
        Body.Hert hert = new Body().new Hert();
        hert.beat();
    }
}

成员内部类变量访问

package com.hanxiao.inner;
public class Outer {
    
    int num = 10; //外部类成员变量
    public class Inner{
    
        int num = 20;//内部类成员变量
        public void methodInner(){
    
            int num = 30;  //内部类局部变量
            System.out.println(num); //内部类局部变量 30
            System.out.println(this.num); //  内部类成员变量 20 
            System.out.println(Outer.this.num); //外部类成员变量  外部类名.this.外部类成员变量 10
        }
    }
}

2、局部内部类

定义在方法内的类,只有当前所属的方法才能使用它,出了这个方法就不能用了

package com.hanxiao.inner;
public class Outer {
    
    public void methodOuter(){
    
        int a = 20;//此处必须为 final int num =10,只是省略了
        class Inner{
    
            int num = 10; 
            public void methodInner(){
    
                System.out.println(num);
                System.out.println(a);
            }
        }
        Inner inner = new Inner();
        inner.methodInner();
    }
}
class Test2{
    
    public static void main(String[] args) {
    
        //只能这么使用
        Outer outer = new Outer();
        outer.methodOuter();
    }
}

3、匿名内部类,最重要的

如果接口的实现类(或者师父类的子类)只需要使用唯一的一次,这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。

定义格式:

接口名称 对象名 = new 接口名称(){

//覆盖重写所有的抽象方法

};

  1. 先得有一个接口

    package com.hanxiao.inner;
    
    public interface MyInterface {
          
        public abstract void method();
    }
    
  2. 使用匿名内部类实现调用

    public class a{
          
        public static void main(String[] args) {
          
            MyInterface myInterface = new MyInterface() {
          
                @Override
                public void method() {
          
                    System.out.println("匿名内部类实现了方法");
                }
            };
            myInterface.method();
        }
    }
    
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aaa_66/article/details/113759369

智能推荐

Java面试题及答案2019版(上,Java开发两年_普通网友的博客-程序员秘密

补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)。18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?答:是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用(地址值)。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和.

Struts2中使用校验文件对表单的校验以及常用的校验_scalad的博客-程序员秘密

之前的手动校是在Action中编写validate犯法或validateXXX形式的方法来完成校验的,如果要给予验证框架来完成输入校验,只需在于Action同一目录下创建一个xml格式的验证文件即可。而之前Action中添加validate方法或validateXXX方法就不需要了。Action.java代码package action;import com.opensymphon

模板方法模式笔记_weixin_34015566的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...

快速搭建微信小程序第三方平台基础教程(一)第三方平台是做什么的_zpzxgcr的博客-程序员秘密

在上个月公司决定分发许多重复的小程序来抢占关键词,当时琢磨了一下两个开发方案想的第一个方案是通过微信提供的http调用和命令行调用然后写一个shell 脚本,但是想想行不通,因为我如果写一个分发工具的话肯定不只是专业技术人员来分发,可能会给公司的其他同学来负责,第二个方案是自己搭建一个第三方平台一切都是傻瓜式操作(手动滑稽);第三方平台是做什么的 公众平台第三方平台是为了...

贪心之最小新整数_贪心最大新整数_xutian_curry的博客-程序员秘密

贪心水题,每次把山峰删去,如果不存在山峰,则删去最后k个数字#include#includechar s[12];int main(){ int n; scanf("%d",&n); for(int q=0;q<n;q++) { int k; scanf("%s",s); scanf("%d",&k); int len=strlen(s); while(k-

harmonyos电脑系统下载,harmonyos系统下载_南方的小李同学的博客-程序员秘密

鸿蒙系统PC版是一款面向未来、面向全场景的分布式操作系统,该系统能够支持多种终端设备,其分布式能力造就新硬件、新交互、新服务,打开焕然一新的全场景世界,据悉,鸿蒙2.0系统在关键的分布式软总线、分布式数据管理、分布式安全等分布式能力上进行了全面升级。【系统特色】1、在终端操作系统中首次采用分布式体系结构,实现跨终端的无缝协作体验鸿蒙2.0系统的“分布式操作系统架构”和“分布式软总线技术”通过公共通...

随便推点

一文搞懂 Hadoop 生态系统的组件(转)_hadoop生态圈组件有哪些_进击的Z同学的博客-程序员秘密

文章目录01Hadoop概述02Hadoop生态圈03Hadoop的优缺点导读:Hadoop是较早用于处理大数据集合的分布式存储计算基础架构,目前由Apache软件基金会管理。通过Hadoop,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力执行高速运算和存储。简单地说,Hadoop是一个平台,在它之上可以更容易地开发和运行处理大规模数据的软件。01Hadoop概述Hadoop体系也是一个计算框架,在这个框架下,可以使用一种简单的编程模式,通过多台计算机构成的集群,分布式处理

好与坏的程序员:如何评价程序员的水平才算客观?_程序员负面评语_熊仙森的博客-程序员秘密

来自:51CTO 作者:徐飞本文标题:好与坏的程序员:如何客观评价程序员的水平?本文地址:https://www.oschina.net/news/87295/good-and-bad-programmer有感于知乎上的一篇关于程序员的讨论。让我突然之间心有戚戚然的感觉。最近一段时间有点江郎才尽的感觉,写不了大的主题,就写点小东西吧。    我们从知乎上面引用的这段小故事开始:  ...

Dubbo面试题及答案,2021年Dubbo面试题-持续更新中_架构师专栏的博客-程序员秘密

2021最新Dubbo面试题【附答案解析】Dubbo面试题及答案2021,Dubbo最新面试题及答案,Dubbo面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~如果不背 Dubbo 面试题的答案,肯定面试会挂!这套Dubbo 面试题大全,希望对大家有帮助哈~博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的1、Dubbo 是什么?Dubbo 是一个分布式

Mysql之正则函数REGEXP的使用,适合复杂查询条件_mysql regexp 索引_IT行业小趴菜的博客-程序员秘密

MySQL 8.0+才引入regexp_replace,regexp_like,regexp_instr,regexp_substr四个函数,在低于此版本的MySQL客户端执行这四个函数,报错:FUNCTION regexp_xxx does not exist下面蓝色字体是链接,个人整理的正则表达式大全正则表达式大全。

Linux下安装protobuf并实现简单的客户端服务器端通信_sdsabc2000的博客-程序员秘密

Linux下安装protobuf并实现简单的客户端服务器端通信http://code.google.com/p/protobuf/downloads/list上可以下载Protobuf的源代码。安装步骤如下所示: 1>tar -xzf protobuf-2.5.0.tar.gz  //进入目录 cd protobuf-2.5.0 //将p

《算法笔记》3.6小节——入门模拟->字符串处理 问题 G: 比较字符串_XdpCs的博客-程序员秘密

问题 G: 比较字符串时间限制 : 1.000 sec 内存限制 : 32 MB题目描述输入两个字符串,比较两字符串的长度大小关系。输入输入第一行表示测试用例的个数m,接下来m行每行两个字符串A和B,字符串长度不超过50。输出输出m行。若两字符串长度相等则输出A is equal long to B;若A比B长,则输出A is longer than B;否则输出A is shorter than B。样例输入2abc xybbb ccc样例输出abc is longer tha

推荐文章

热门文章

相关标签