java内部类_让你一看就明白_再也不用困惑啦

在一篇blog:“java内部类的作用分析”中你可以了解java内部类的一些东西,不过内部类中还有一些地方值得我们细心研究...

下面是我总结出来的java内部类的一些东西,分享给大伙儿....

one:静态内部类可以有静态成员,而非静态内部类则不能有静态成员

怎样理解这个呢?

看看下面的代码:

 1 /**
 2  * 
 3  */
 4 package com.b510.test;
 5 
 6 public class Test {
 7     private int number = 1;
 8 
 9     // 非静态内部类 可以有 非静态成员
10     private class InnerTest {
11         // error  非静态内部类不能有静态成员
12         // private static int inNumber = 2;
13         private int inNumber = 2;
14         
15         public InnerTest() {
16             setNumber(2);
17             inNumber = inNumber + number;
18             System.out.println("innerTest---" + inNumber);
19         }
20     }
21 
22     // Test的私有方法
23     private void setNumber(int number) {
24         this.number = number;
25     }
26 
27     // 构造函数
28     public Test() {
29         InnerTest in = new InnerTest();
30         System.out.println("test");
31     }
32 
33     public static void main(String[] args) {
34         Test test = new Test();
35         // innerTest---4
36         // test
37     }
38 }

第一概念是不是很好理解.....

two:静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量

这里涉及到静态内部类和外部类的关系:

 1 /**
 2  * 
 3  */
 4 package com.b510.test;
 5 
 6 public class Test {
 7     private static int number = 1;
 8     private String name = "test";
 9 
10     // 静态 内部类
11     private static class InnerTest {
12         // 静态 内部类 可以有非静态成员
13         private int inNumber = 2;
14 
15         public InnerTest() {
16             //静态内部类 可以访问 外部类 的静态成员
17             setNumber(2);
18             inNumber = inNumber + number;
19             System.out.println("innerTest---" + inNumber);
20             //error 静态内部类 不可以访问 外部类  的非静态成员
21             //System.out.println(name);
22         }
23     }
24 
25     // Test的 静态 私有方法
26     private static void setNumber(int n) {
27         number = n;
28     }
29 
30     // 构造函数
31     public Test() {
32         InnerTest in = new InnerTest();
33         System.out.println("test");
34     }
35 
36     public static void main(String[] args) {
37         Test test = new Test();
38         // innerTest---4
39         // test
40     }
41 }

这个其实很好理解的,不知道你看来代码15~23有没理解....

three:非静态内部类的非静态成员可以访问外部类的非静态变量

这个在第一个中就已经提到了:在one代码的17行

1 inNumber = inNumber + number;

number是外部类的非静态成员,inNumber作为非静态内部类的成员可以访问number

是不是很好理解....

总结一下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏斑斓

Scala中的偏函数

艺术地说,Scala中的Partial Function就是一个“残缺”的函数,就像一个严重偏科的学生,只对某些科目感兴趣,而对没有兴趣的内容弃若蔽履。Part...

36540
来自专栏鸿的学习笔记

Python和Scala的序列

序列是一门高级语言里都会具备的一种数据结构,Scala和Python也不例外。在不同的语言里,序列有着各种不同的别称以及增添了不同的功能,今天只关注Scala和...

9210
来自专栏微信公众号:Java团长

Java抽象类与oop三大特征

在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它 只有声明,而没有具体的实现 。抽象方法的声明格式为:

13340
来自专栏java达人

Java中只有按值传递,没有按引用传递!

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“...

23390
来自专栏lhyt前端之路

一些冷门的js操作0.前言1.数组2.位操作符2.1字符串转数字2.2更多的操作3. 构造类

大家学习的时候,一开始小白,然后接触到进阶的东西的时候,发现一切得心应手,有的人可能开始说精通了。突然有一天,发现了一些基于很基础的东西的骚操作,就开始怀疑人生...

10820
来自专栏猿人谷

《C++ primer》--第三章

习题3.2 什么是默认构造函数? 解答:      默认构造函数就是在没有显示提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有形参提供默认实参的...

18850
来自专栏黑泽君的专栏

java中迭代器的原理图解和源码浅析

a:迭代器为什么定义了一个接口而不是实现类?   假如把迭代器定义为一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历了。 ...

29310
来自专栏小白的技术客栈

Python基础语法-常量与变量(重发)

昨天的文章虽然有插图,但是一个都没有显示出来,估计是天气太热,不愿意露面的缘故吧。这些都不是事,暂且不表,今天再次发布与昨天相同的文章,主要为了弥补3个插图。为...

37840
来自专栏Play & Scala 技术分享

Play For Scala 开发指南 - 第2章 Scala基本语法

28350
来自专栏用户2442861的专栏

python copy & deepcopy 区别

输出: l1: [1, 2, 3, ['a', 'b', 'c']] l2: [1, 2, 3, ['a', 'b', 'c']]

21530

扫码关注云+社区

领取腾讯云代金券