文档章节

内部类与外部类的互访

五大三粗
 五大三粗
发布于 2015/02/27 14:56
字数 621
阅读 15
收藏 0
点赞 0
评论 0

内部类又称为嵌套类,可以把内部类理解为外部类的一个普通成员。

 

内部类访问外部类

里面的可以自由访问外面的,规则和static一样。(访问非静态时必须先创建对象)

 

具体如下:

 

非静态内部类的非静态方法

直接访问

 

 

public class Outter { 

    int i = 5; 

    static String string = "Hello"; 

     

    class Inner1{ 

        void Test1 (){ 

            System.out.println(i); 

            System.out.println(string); 

        } 

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

静态内部类的非静态方法

因为静态方法访问非静态外部成员需先创建实例,所以访问i时必须先new外部类。

 

 

public class Outter { 

    int i = 5; 

    static String string = "Hello"; 

     

    static class Inner2{ 

        void Test1 (){ 

            System.out.println(new Outter().i); 

            System.out.println(string); 

        } 

    } 

静态内部类的静态方法

规则如上

 

 

public class Outter { 

    int i = 5; 

    static String string = "Hello"; 

     

    static class Inner2{ 

        static void Test2 (){ 

            System.out.println(new Outter().i); 

            System.out.println(string); 

        } 

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

 外部类访问内部类

大方向:因为将内部类理解为外部类的一个普通成员,所以外面的访问里面的需先new一个对象。

 

非静态方法访问非静态内部类的成员:

new 内部类对象

 

 

public class Outter { 

    void Test1(){ 

        System.out.println(new Inner1().i); 

    } 

    class Inner1{ 

        int i = 5; 

//      static String string = "Hello";  定义错误! 

    } 

 静态方法访问非静态内部类的成员

静态方法Test2访问非静态Inner1需先new外部类;

 

继续访问非静态成员i需先new 内部类

 

所以访问规则为:new Outter().new Inner1().i

 

 

public class Outter { 

    static void Test2(){ 

        System.out.println(new Outter().new Inner1().i); 

    } 

    class Inner1{ 

        int i = 5; 

//      static String string = "Hello";  定义错误! 

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

非静态方法访问静态内部类的成员

先“外部类.内部类”访问至内部类。

 

若访问静态成员,则需先new再访问;若访问非静态成员,则可直接访问。

 

 

public class Outter { 

    void Test1(){ 

        Outter.Inner2 inner2 = new Outter.Inner2(); 

        System.out.println(inner2.i); 

        System.out.println(inner2.string); 

        System.out.println(Outter.Inner2.string); 

    } 

    static class Inner2{ 

        int i = 5; 

        static String string = "Hello";  

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

非静态方法访问非静态内部类的成员

先“外部类.内部类”访问至内部类,再new即可访问静态成员。

 

 

public class Outter { 

    void Test1(){ 

        Outter.Inner1 inner2 = new Outter.Inner1(); 

        System.out.println(inner2.i); 

    } 

    class Inner1{ 

        int i = 5; 

//      static String string = "Hello"; 定义错误! 

    } 

 

匿名内部类

匿名内部类访问外部成员变量时,成员变量前应加final关键字。

 

 

final int k = 6; 

((Button)findViewById(R.id.button2)).setOnClickListener(new OnClickListener() { 

    @Override 

    public void onClick(View v) { 

        // TODO Auto-generated method stub 

        System.out.println(k); 

    } 

});  

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 157
博文 2215
码字总数 4578339
作品 0
广州
程序员
Java的内部类

类是java中定义的一个独立的程序单元,在某种情况下也可以把一个类放在另外一个类的内部定义,这定义在内部的类就叫内部类或嵌套类。 1.内部类提供了更好的封装,把一个内部类隐藏在外部类之...

西红柿的眼泪
2016/07/09
38
0
内部类, 静态内部类, 局部类, 匿名内部类的解析和区别

众所周知,外部顶级类的类名需和类文件名相同,只能使用public和default。而内部类是指在外部类的内部再定义一个类,类名不需要和文件名相同。内部类可以是静态static的,也可用public,def...

翻滚吧李博
2017/12/16
0
0
黑马程序员---面向对象之内部类

-------------------------android培训、java培训、期待与您交流! ------------------------- Java中的内部类有四种:一般内部类、静态内部类、局部内部类、匿名内部类。 一、一般内部类 定...

长平狐
2013/07/01
72
0
JAVA内部类是怎么玩儿的

内部类一共分为:成员内部类,局部内部类,静态嵌套类,匿名内部类。 1. 成员内部类 最普通的内部类 成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private...

牧师-Panda
2016/09/08
15
0
二、JAVA基础--内部类总结

6.4 内部类 概念:内部类就是定义在另一个类中的类。 好处:可以访问该类的所有数据,包括私有数据。 内部类对同个包的其他类隐藏。 一、内部类访问对象 内部类和外部类是类之间的关系,并不是...

cnslp
2017/04/22
0
0
Java中的内部类总结

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为...

zhangyujsj
2016/01/04
4
0
java中的内部类总结  

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为...

solar.xie
2015/09/25
74
0
第十章 内部类

本文转载自牛客网 往OuterClass类的代码段中插入内部类声明, 哪一个是错误的问题的第一个解析。 可以将一个类的定义放在另一个类的内部,这就是内部类 1.为什么使用内部类? 使用内部类最吸引...

notis
2017/10/26
0
0
Java中内部类

1.四种内部类:成员内部类、局部内部类、匿名内部类和静态内部类。 2.成员内部类 2.1成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。 2.2成员内部类...

指尖Coding
2016/09/18
18
0
黑马程序员——面向对象篇之多态

------- android培训、java培训、期待与您交流! ---------- 多态 定义:某一类事物的多种存在形态。 例:动物中猫,狗。 猫这个对象对应的类型是猫类型 猫x = new 猫(); 同时猫也是动物中的...

optimisticpig
2014/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部