Java基础(三)——内部类
一、内部类
内部类(Inner Class)就是定义在一个类里面的类。与之对应,包含内部类的类被称为外部类。内部类可以用private修饰。
1、为什么要定义内部类?或者内部类的作用是什么?
- 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
 - 内部类的方法可以直接访问外部类的所有数据,包括私有的数据。
 - 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。
 
2、内部类可分为几种?
成员内部类;静态内部类;方法内部类;匿名内部类。
3、成员内部类
内部类中最常见的就是成员内部类,也称为普通内部类。我们来看如下代码:

1 // 外部类Outer
2 public class Outer {
3 // 外部类的私有属性
4 private int a = 99;
5 private int b = 666;
6
7 // 内部类Inner
8 public class Inner {
9 // 内部类的成员属性
10 private int a = 199;
11
12 public void test() {
13 int a = 299;
14 System.out.println("访问方法的局部变量a:" + a);
15 System.out.println("访问内部类中的a:" + this.a);
16 System.out.println("访问外部类中的a:" + Outer.this.a);
17 System.out.println("不重名的变量b:" + b);
18 }
19 }
20
21 // 测试成员内部类
22 public static void main(String[] args) {
23 Outer o = new Outer();
24 Inner i = o.new Inner();
25 i.test();
26 }
27 }
28
29 // 结果
30 访问方法的局部变量a:299
31 访问内部类中的a:199
32 访问外部类中的a:99
33 不重名的变量b:666
成员内部类
4、静态内部类
静态内部类是static修饰的内部类。我们来看如下代码:
静态内部类5、方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
方法内部类 6、匿名内部类
匿名内部类就是一个实现了某个接口的类。而该类没有名字,在使用时直接 new 接口名。

1 // 外部类Outer
2 public class Outer {
3
4 public Inner getInner(final int a, String str) {
5 return new Inner() {
6 @Override
7 public int getSum() {
8 return a + 1;
9 }
10 };
11 }
12
13 public static void main(String[] args) {
14 final Inner inner = new Outer().getInner(12, "lx");
15 System.out.println(inner.getSum());
16 }
17 }
18
19 interface Inner {
20 int getSum();
21 }
22
23 // 结果
24 13
匿名内部类
Java基础(三)——内部类的更多相关文章
- Java 基础三、接口与内部类
		
1. 在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...
 - java基础之 内部类
		
Java中的内部类共分为四种: 静态内部类static inner class (also called nested class) 成员内部类member inner class 局部内部类loca ...
 - java基础之 内部类 & 嵌套类
		
参考文档: 内部类的应用场景 http://blog.csdn.net/hivon/article/details/606312 http://wwty.iteye.com/blog/338628 定 ...
 - Java基础(53):内部类(转)
		
java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...
 - Java基础(五)--内部类
		
内部类简单来说就是把一个类的定义放到另一个类的定义内部 内部类分为:成员内部类.局部内部类.匿名内部类.静态内部类 成员内部类:最常见的内部类 public class Outter { privat ...
 - java基础(三):反射、反序列化破解单列模式和解决方式
		
单例模式指的是一个类只有一个对象,通过一些措施达到达到这个目的.但是反射和反序列化可以获得多个不同的对象. 先简单的认识一下单例模式 一:单例模式 通过私有构造器,声明一个该类的静态对象成员,提供一个 ...
 - java基础(三)   加强型for循环与Iterator
		
引言 从JDK1.5起,增加了加强型的for循环语法,也被称为 "for-Each 循环".加强型循环在操作数组与集合方面增加了很大的方便性.那么,加强型for循环是怎么解析的 ...
 - Java面试题总结之Java基础(三)
		
1.JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try 块中可以抛出异常吗? 答:Java 通过面向对象的方法进行异常处理, ...
 - JAVA基础知识|内部类
		
一.什么是内部类? 内部类(inner class)是定义在另一个类中的类 为什么使用内部类? 1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据 2)内部类可以对同一个包中的其他类隐藏 ...
 - Java基础加强-内部类及代理
		
/*内部类是一个编译时的概念,*/ 常规内部类.静态内部类.局部内部类.匿名内部类 1.常规内部类(常规内部类没有static修饰且定义在外部类类体中) 1.常规内部类中的方法可以直接使用外部类的实例 ...
 
随机推荐
- couchdb(5984)未授权访问
			
启动环境 测试 poc地址 https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py map -p 5984 ...
 - Java8 Lambda表达式(二)
			
目录 一.Java8 内置的四大核心函数式接口 1. 消费型接口 Consumer 2. 供给型接口 Supplier 3. 函数型接口 Function 4.断言型接口 Predicate 二.方法 ...
 - Java基础——JavaDoc生成文档
			
JavaDoc生成文档 package Top1;  /** * @author lwt * @version 1.0 * @since 1.8 * */  public class ...
 - C++  1 (只在源文件)//点和圆的关系 //设计一个圆形类 和一个点类 计算点和圆的关系 //点到圆心的距离 == 半径   点在圆上 //点到圆心的距离  > 半径   点在圆外 //点到圆心的距离  < 半径   点在圆内 //点到圆心的距离 获取 ....... (x1 -x2)^2 +  (y1-y2)^2 开根号 和半径对比 // 计算 可以 两边同时 平方
			
1 //点和圆的关系 2 //设计一个圆形类 和一个点类 计算点和圆的关系 3 //点到圆心的距离 == 半径 点在圆上 4 //点到圆心的距离 > 半径 点在圆外 5 //点到圆心的距离 &l ...
 - Linux线程同步之读写锁(rwlock)
			
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程.当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步, 和 ...
 - Fluid + GooseFS 助力云原生数据编排与加速快速落地
			
前言 Fluid 作为基于 Kubernetes 开发的面向云原生存算分离场景下的数据调度和编排加速框架,已于近期完成了 v0.6.0 版本的正式发布.腾讯云容器 TKE 团队一直致力于参与 Flui ...
 - 自己动手实现Lua--实现TAILCALL指令
			
最近在看<自己动手实现Lua-虚拟机.编译器和标准库>.这是本挺不错的书,通过学习此书能够对Lua语言有比较深刻的理解,此外还可以对如何自己实现一门脚本语言有直观的认识.对于想学习Lua的 ...
 - DVWA靶场之Command Injection(命令行注入)通关
			
Command Injection Low: <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUES ...
 - VRRP的基本配置
			
一.实验拓扑 二.实验编址 三.实验步骤: 1.设置PC的IP等信息 2.启动设备(全选) 3.设置路由器端口ip 4. 配置ospf网络 查看: 5.配置VRRP协议 配置完成后查看: 6.验证主备 ...
 - 直流电机、减速器、编码器与TB6612FNG知识整理
			
之前把MPU6050的相关知识了解了一下,可以做到测量欧拉角,在平衡小车的开发中需要测量小车的倾角来调整小车姿态.接下来该学习小车的电机驱动部分了,这里整理一下直流电机.减速器.编码器以及TB6612 ...