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

内部类访问外部类

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

具体如下:

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

直接访问

public class Outter {

int i = 5;

static String string = "Hello";

class Inner1{

void Test1 (){

System.out.println(i);

System.out.println(string);

}

}

}

静态内部类的非静态方法

因为静态方法访问非静态外部成员需先创建实例,所以访问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);

}

}

}

外部类访问内部类

大方向:因为将内部类理解为外部类的一个普通成员,所以外面的访问里面的需先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"; 定义错误!

}

}

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

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

若访问静态成员,则需先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";

}

}

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

先“外部类.内部类”访问至内部类,再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);

}

});

匿名内部类 可以访问外部类_Java 内部类与外部类的互访使用小结相关推荐

  1. java内部类外部类_Java内部类:如何在内部类中返回外部类对象

    Nasted Class 的介绍,请详见参考 今天讨论的不是不是内部类的概念,而是具体使用的一个场景-如何在内部类中返回外部对象 (孤猪:我在程序里也碰到过一次这样的状况,非静态内部类可以直接调用外部 ...

  2. java的内部类和外部类_java内部类 和外部类的区别

    下面说一说内部类(Inner Class)和静态内部类(Static Nested Class)的区别: 定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明public.prote ...

  3. 匿名内部类 可以访问外部类_Java——内部类详解

    说起内部类,大家肯定感觉熟悉又陌生,因为一定在很多框架源码中有看到别人使用过,但又感觉自己使用的比较少,今天我就带你具体来看看内部类. 内部类基础 所谓内部类就是在类的内部继续定义其他内部结构类. 在 ...

  4. java中局部内部类_Java内部类详解--成员内部类,局部内部类,匿名内部类,静态内部类...

    一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一 ...

  5. Java hibernate假外键_java – Hibernate:外键的列数错误

    我已经定义了我的两个实体类User和Permission之间的多对多关系.用户具有username和countyId的主键组合,我的Permission表具有常规整数Id.表UserPermissio ...

  6. Java hibernate假外键_JAVA基础:Hibernate外键关联与HQL语法

    例如对于TUser类 1.实体查询 String hql = " from TUser"; 执行这条语句会返回TUser以及TUser子类的纪录. 注: 如果 TUser 类具有外 ...

  7. java内部类与外部类

    java内部类与外部类 java内部类与外部类 一.内部类的作用 二.内部类分类 一.成员内部类 1.非静态内部类 2.静态内部类 二.局部内部类 三.匿名内部类(重要) java内部类与外部类 概念 ...

  8. java内部类选择题_java内部类使用总结

    1.什么是内部类? 定义在类内部的类,称之为内部类 public class Out{ class In{ //此时In就是内部类 } } 2.为什么要使用内部类? 1),增强封装,把内部类隐藏在外部 ...

  9. java 内部类怎么调用成员变量_JAVA内部类之成员内部类

    JAVA有一个特殊的类形式--内部类(这个词有点为难普通话不好的南方朋友).今天我们就来聊聊内部类的一种:成员内部类. 如何定义成员内部类 那要如何定义成员内部类呢. 既然叫成员内部类,说明和成员变量 ...

最新文章

  1. js url传值中文乱码完美解决(JAVA)
  2. web请求报出 “超过了最大请求长度” 【注意:重启IIS】
  3. linux系统层次(转)
  4. MySQL 5.7.22 二进制安装
  5. 《高性能JavaScript》第三章 DOM编程
  6. Boost:测试bind <void>
  7. SQL 查询总是先执行SELECT语句吗?
  8. OAuth 2.0 扩展协议之 PKCE
  9. 解决: Intellij IDEA 运行报错 Command line is too long
  10. android xml黑体字_为 Android 换上任意喜欢的字体,你可以试试这个 Magisk 模块
  11. html背景图平移显示一次,js实现单张图片平移切换效果
  12. 中值滤波_图像处理之低通滤波
  13. 作战军事环境仿真系统软件解决方案
  14. 用python写个类似浏览器的下载器,超简单的
  15. java浪曦学习日志 异常类
  16. 小米air耳机重新配对_小米air耳机重新配对_「小三爷出品」不错的新年礼物,小米蓝牙耳机Air体验...
  17. 用js处理图片加载错误时加载默认图片的方法
  18. doors如何导入HTML文档,DOORS使用手册.doc
  19. (翻译)缩略图(Thumbnail)
  20. [坑] FileZilla下载按钮为灰色

热门文章

  1. 【clickhouse】clickchouse的分区合并速度小于插入速度会怎么样
  2. 【MySQL】MySQL 一些 使用 案例
  3. 【正则表达式】正则表达式
  4. JVM : VisualVM 排查内存泄漏的问题
  5. Mac :谷歌浏览器 NET::ERR_CERT_INVALID 此证书已被撤消。网络错误和攻击行为通常是暂时的,因此,此网页稍后可能会恢复正常
  6. 【Linux】linux grep过滤中,不包含某些字符串
  7. 【Flink】Flink 使用 ParameterTool 进行传参
  8. 10-300-020-简介-架构-简介
  9. python爬虫避免重复数据_No.2﹣Python﹣scan﹣anti-crawler(随机请求头和IP代理)取消链接和重复数据消除,NO2pythonscrapy,反,爬虫,去...
  10. 查看被docker-proxy占用的端口