内部类的分类及其定义
一、成员内部类
代码:
public class Test10 {public static void main(String[] args) {/*方式1创建成员内部类对象*/C c = new C();C.D d = c.new D();/*方式2创建成员内部类对象*/C.D d1 = c.getClassD();}
}
class C{private String name = "外部类";public void run(){System.out.println("外部类奔跑");}/*创建一个返回D对象的方法*/public D getClassD(){return new D();}/*使用内部类的属性和方法*/public void eat(){D d = new D();System.out.println(d.value);d.say();}class D{private String value = "DDD";private String name = "内部类";public void say(){System.out.println(C.this.name);System.out.println(name);run();}}
}
1、Inner类定义在Outer类的内部,相当于Outer类的成员变量的位置,Inner类可以使用任意访问修饰符,如:public、private、protected等。
2、Inner类中定义的test()方法可以访问Outer类中的数据,不受访问控制符的影响。
3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );如创建Inner的内部类对象:要先创建外部类对象:Outer o = new outer(); 创建内部类:Inner i = o.new Inner();访问Inner中的test()方法:i.test();
4、如果外部类和内部类具有相同的成员变量或方法,内部类可以直接访问内部类的成员变量或方法,但如果内部类访问外部类的成员变量或者方法时,需要使用this关键字
二、静态内部类
静态内部类就是用static修饰的内部类
1、静态内部类不能直接访问外部类的非静态成员,但,可以通过new 外部类().成员的方式访问;
2、如果外部类的静态成员与内部类的静态成员相同, 可以通过"类名.静态成员"来访问外部类的静态成员;如果不同,可以直接调用外部类的静态成员名。
三、局部内部类
//在局部位置,可以创建内部类对象,通过对象调用和内部类方法
class Outer {private int age = 20;public void method() {final int age2 = 30;class Inner {public void show() {System.out.println(age);//从内部类中访问方法内变量age2,需要将变量声明为最终类型。System.out.println(age2);}}Inner i = new Inner();i.show();}
}
为什么局部内部类访问局部变量必须加final修饰呢?
因为局部变量是随着方法的调用而调用,使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而该变量已经没有了。为了让该值还存在,就加final修饰。
原因是,当我们使用final修饰变量后,堆内存直接存储的是值,而不是变量名。
四、匿名内部类
本质:其实是继承该类或者实现接口的子类匿名对象
interface Inter {public abstract void show();
}class Outer {public void method(){new Inner() {public void show() {System.out.println("HelloWorld");}}.show();}
}class Test {public static void main(String[] args) {Outer o = new Outer();o.method();}
}
内部类的分类及其定义相关推荐
- java嵌套类型 无法隐藏外层类型_java内部类深入详解 内部类的分类 特点 定义方式 使用...
java内部类 内部类的分类 特点 定义方式 使用 外部类调用内部类 多层嵌套内部类 内部类访问外部类属性 接口中的内部类 内部类的继承 内部类的覆盖 局部内部类 成员内部类 静态内部 ...
- Java的知识点14——内部类的概念、内部类的分类
内部类的概念 一般情况,我们把类定义成独立的单元.有些情况下,我们把一个类放在另一个类的内部定义,称为内部类(innerclasses). 内部类可以使用public.default.protecte ...
- 内部类的分类:成员内部类、静态内部类、局部内部类、匿名内部类
内部类 故名思义 -- 就是在一个类A的内部定义另外一个类B,那么类A就是外部类,类B就是A的内部类. 首先需要明确: 1.内部类一定要定义在外部类的"{}"里面,而不是简单的写在 ...
- Java内部类的分类 西安尚学堂
内部类的分类 笔者认为内部类之所以很难理解,正是因为语法覆盖了大量难以理解的技术(如果都像基础内部类那样,就没有多少意思了).内部类可以分为四种:成员内部类,局部内部类,嵌套类,匿名内部类. 静态内部 ...
- Java中,内部类的概述和内部类的访问特点和内部类的分类(内部类的位置)
内部类的概述: 把类定义在另一个类的内部,该类就被称为内部类. 举例:把类B定义在类A中,类B就被称为内部类. 内部类的访问特点: A:内部类可以直接访问外部类的成员,包括私有成员. B:外部类要想访 ...
- NLTK频率分类中定义的函数
NLTK频率分类中定义的函数 例子 描述 fdist=FreqDist(samples) 创建包含给定样本的频率分布 fdist.inc(sample) 增加样本 fdist['monstrous'] ...
- Paper:自动驾驶领域SAE标准之《道路机动车辆驾驶自动化系统相关术语的分类和定义》官方英文原文翻译与解读(二)
Paper:自动驾驶领域SAE标准之<道路机动车辆驾驶自动化系统相关术语的分类和定义>官方英文原文翻译与解读(二) 目录 自动驾驶领域SAE标准之<道路机动车辆驾驶自动化系统相关术语 ...
- Paper:自动驾驶领域SAE标准之《道路机动车辆驾驶自动化系统相关术语的分类和定义》官方英文原文翻译与解读(一)
Paper:自动驾驶领域L级别SAE标准<道路机动车辆驾驶自动化系统相关术语的分类和定义&Taxonomy and Definitions for Terms Related to Dr ...
- WEB漏洞分类与定义指南
WEB漏洞分类与定义指南 web vulnerability classification and definition guideline 前 言 本标准按照 本标准按照 GB/T1.1GB/T1. ...
最新文章
- RabbitMQ调试与测试工具-v1.0.1 -提供下载测试与使用
- 配置JDK时环境变量path和JAVA_HOME的作用
- dos窗口ping命令测试实战
- 发布5个月全系下跌500 麒麟980+40W快充 多亏了华为P30!
- iOS中POST请求
- 缺陷调研报告_工厂的缺陷的分析报告及产生原因
- java shirofilter_Spring项目集成ShiroFilter简单实现权限管理
- 信奥中的数学:信息论基础
- 一个简单的Blob存取例子
- 信息系统项目管理师视频教程——10 信息系统项目管理基础
- vscode快速格式化代码
- 纯干货,用好PPT中的异形,提高页面的设计感,建议收藏!
- The following method did not exist: kotlin.collections.ArraysKt.copyInto([B[BIII)[B
- matlab三维投影图,matlab三维图投影轮廓
- You can't specify target table 'ship_product_cat' for update in FROM clause
- ROS turtlebot_follower :让机器人跟随我们移动
- Python发送邮件(以QQ邮箱为例)
- uva1626 括号序列
- 2021河南省ICPC省赛总结
- chariot iperf使用_调用IxChariotAPI测试吞吐量方法