1.定义

内部类是指在一个外部类的内部再定义一个类。

内部类作为外部类的一个成员,并且依附于外部类而存在的。

内部类可为static,可用public、protected、private修饰。(而外部类不可以:外部类只能使用publi和default)。

2.分类

在一个类(外部类)中直接定义的内部类(成员内部类)、

局部内部类、

静态内部类、

匿名内部类。

3.使用方法

A. 在一个类中直接定义的内部类

1)      外部类不能直接访问内部类的的成员,但可以通过内部类对象来访问。

2)      内部类作为外部类的成员,可以访问外部类的所有成员。

3)      注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。

4)      成员内部类与普通的成员没什么区别,可以与普通成员一样进行修饰和限制。

public class MyMain {

int outer_x = 100;

class Inner{

//局部变量,其范围为定义它的代码块(不受修饰符的影响)。 public int y = 10; //局部变量 private int z = 9;

int m = 5;

//static int k=1;//内部类中不允许定义静态变量

public void display1(){

System.out.println("display outer_x:"+ outer_x);

}

private void display2(){

System.out.println("display outer_x:"+ outer_x);

}

}

void test(){

Inner inner = new Inner();

inner.display1();

inner.display2();

System.out.println("Inner y:" + inner.y);//可以访问 System.out.println("Inner z:" + inner.z);//可以访问 System.out.println("Inner m:" + inner.m);//可以访问 }

public static void main(String args[]){

MyMain outer = new MyMain();

outer.test();

}

}

B. 在一个方法中定义的内部类

在方法中定义的内部类称为局部内部类。与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。其他用法和成员内部类相同。

C. 静态内部类

静态内部类:不能访问外部类的非静态成员,这是由Java语法中"静态方法不能直接访问非静态成员"所限定。若想访问外部类的变量,必须通过其它方法解决,由于这个原因,静态嵌套类使用很少。

静态内部类其实已经脱离了外部类。在创建静态内部类对象时也不需要外部类对象的存在。其实质是一个放置在别的类内部的普通类。而关键字static也只是说明其在创建对象时不依赖于外部类对象的存在,并不是说这个类本身是静态的。

静态内部类与前面所讲的两种非静态内部类的语法基本相同。区别主要是在内部类的声明前面要加上static 关键字。另外,静态内部类也不可以用private进行定义。

静态内部类的对象可以直接生成,而不需要外部类的对象来生成,这样实际上是使静态内部类成为了一个顶级类。这主要是因为静态内部类是外部类的静态成员,并不依赖于外部类的对象而存在。

静态内部类与非静态内部类的区别是本质上的。非静态内部类是外部类对象组成的一部分,主要是辅助外部类对象工作的,与外部类对象存在这对成员变量的共享关系。

D.匿名类

匿名内部类是一种特殊的局部内部类,这种内部类没有类名。该类适用于只使用一次并且不需要多次创建对象的类。使用匿名内部类可以使类代码与创建对象同时完成,这样做不但方便,还提高代码的可维护性。

匿名内部类是唯一一种没有构造方法的类。正因为其没有构造方法,所以匿名内部类的使用范围非常有限。

大部分匿名内部类用于接口回调。

匿名内部类在编译的时候由系统自动起名为Out$1.class

匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。

语法规则:new

interface pr

{

void print1();

}

public class noNameClass

{

public pr dest()

{

//这个用法的作用是:创建一个对象的实例,并且 override 它的一个函数,然后返回。 return new pr(){

public void print1() {

System.out.println("Hello world!!");

}

};

}

public static void main(String args[])

{

noNameClass c=new noNameClass();

pr hw=c.dest();

hw.print1();

}

}

--------------------------------------------------------------------

PS: 欢迎关注公众号"Devin说",会不定期更新Java相关技术知识。

--------------------------------------------------------------------

java 内部类调用_Java内部类使用总结相关推荐

  1. java 内部类 作用_java内部类的作用分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

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

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

  3. java内部类写法_java内部类怎么写

    一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指正. 一.内部类基础 在Java中,可以将一个类定义在另一个类里面 ...

  4. java并发调用_Java并发教程–可调用,将来

    java并发调用 从Java的第一个发行版开始,Java的美丽之处之一就是我们可以轻松编写多线程程序并将异步处理引入我们的设计中. Thread类和Runnable接口与Java的内存管理模型结合在一 ...

  5. java 子类调用父类内部类_java 如何在子类方法中实例化父类的内部类?

    匿名用户 1级 2012-07-30 回答 public interface Interface1 { void method1(); } public class Class1 { protecte ...

  6. java 内部类 抽象类_Java 内部类、匿名内部类、抽象类

    何为内部类 内部类是指 在一个类中在定义一个类 如: 1.成员内部类 public class F { private int a; public void fun(){ //TODO } publi ...

  7. java内部类选择题_java内部类详解(附相关面试题)

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟. 一.内 ...

  8. java内部类规则_Java内部类规则

    Java内部类分为 成员内部类 和 局部内部类 一.成员内部类也即实名内部类 又分为 非静态实名内部类 和 静态实名内部类 1.实名内部类可以看做外部类的成员 , 因而可以具有 private .默认 ...

  9. 另一个.java文件调用_java - 如何调用另一个类“写文件”的方法? - SO中文参考 - www.soinside.com...

    在我的Android应用程序,我想有一类处理所有"写入/读取到文本文件"的行动.所以,我根本就调用我的readUserFile.java文件我想的方法.但我的方法将不会在该文件中工 ...

最新文章

  1. pandas datafrae merge操作
  2. 2021年14项世界互联网领先科技成果发布
  3. [bzoj 2456]mode
  4. Corejava -异常
  5. 【机器视觉】 exit算子
  6. java单例模式_在Java中实现单例模式
  7. AngularJS(6)-选择框Select
  8. 2020杭电多校(二) New Equipments(最小费用最大流)
  9. STM32与宇电设备实现AI-BUS通讯
  10. 第四章、epub文件处理 -- epub文件内部组成
  11. hashmap扩容机制_图文并茂,HashMap经典详解!
  12. 如何导出/导入PuTTy会话列表?
  13. 常用排序算法(六)——希尔排序
  14. cadence17.4 设计PCB零基础教程入门学习过程
  15. 登录oneNote失败解决
  16. 扩展欧几里德算法 C# 实现
  17. QQ信任登陆注册开发者帐号
  18. 怎么下载jQuery文件
  19. 【OpenCV入门教程之五】 分离颜色通道 多通道图像混合
  20. zabbix通过yum安装,启动报错zabbix-agent.service never wrote its PID file. Failing.

热门文章

  1. uniapp image图片切换动效_谷歌设计团队发布了一款动效神器,让 UI 和动效无缝打通...
  2. 利用二叉链表创建二叉树_利用递归解LeetCode第111题:二叉树的最小深度
  3. linux rm 命令删除文件恢复_rm删除文件空间就释放了吗?天真!
  4. linux tomcat 进程杀掉_Linux下tomcat的配置踩坑
  5. php mail执行命令,PHPMailer 命令执行 任意文件读取漏洞利用 【含POC】
  6. java web 分页_Java Web(十一) 分页功能的实现
  7. HALCON 21.11:深度学习笔记(2)
  8. 黑群晖vmm专业版_Virtual Machine Manager 专业版打造高效安全虚拟环境
  9. 首发!来自你的Java同行的调查报告
  10. 阿里云图数据库GDB公测,高度连接数据查询效率提升10倍