前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java内部类_让你一看就明白_再也不用困惑啦

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

作者头像
Hongten
发布2018-09-13 14:22:43
4750
发布2018-09-13 14:22:43
举报
文章被收录于专栏:HongtenHongten

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

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

代码语言:javascript
复制
one:静态内部类可以有静态成员,而非静态内部类则不能有静态成员

怎样理解这个呢?

看看下面的代码:

代码语言:javascript
复制
 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 }

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

代码语言:javascript
复制
two:静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量

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

代码语言:javascript
复制
 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有没理解....

代码语言:javascript
复制
three:非静态内部类的非静态成员可以访问外部类的非静态变量

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

代码语言:javascript
复制
1 inNumber = inNumber + number;

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

是不是很好理解....

总结一下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-04-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档