zoukankan      html  css  js  c++  java
  • 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

    是不是很好理解....

    总结一下:

  • 相关阅读:
    数据结构--窗口内最大值最小值的更新结构(单调双向队列)
    数据结构--BFPRT算法(TOP-K算法)
    数据结构--KMP算法(字符串匹配算法)--树的子结构
    数据结构--Manacher算法(最长回文子串)--生成最短回文串
    数据结构--KMP算法(字符串匹配算法)--在末尾添加字符串,是其包含字符串两次,且长度最短
    数据结构--Manacher算法(最长回文子串)
    数据结构--KMP算法(字符串匹配算法)
    剑指offer——和为S的连续正数序列
    剑指offer——删除链表中重复的结点
    XML DOM解析 基础概念
  • 原文地址:https://www.cnblogs.com/hongten/p/hongten_innerclass.html
Copyright © 2011-2022 走看看