(static修饰的成员属于整个类,而不属于单个对象)

定义:将一个类放到另一个类的内部定义,这个在内部定义的类就叫做内部类(也有的成嵌套类),包含内部类的类被称为外部类(也有的称宿主类)。

1。非静态内部类

没有使用static修饰的内部类就是非静态内部类。

注意:a。java不允许在非静态内部类中定义静态成员

b。当调用非静态内部类中的实例方法时,必须有一个非静态成员内部类实例,非静态内部类实例必须寄生在外部实例内

c。如果外部类成员变量与内部类成员变量与内部类里的方法的局部变量同名,可通过this,外部类类名.this 作为限定来加以区分

public class Test {private String prop = "外部类的实例变量";public class InClass{private String prop = "内部类中的实例变量";public void info(){String prop = "局部变量";System.out.println("外部类的实例变量值:"+Test.this.prop);System.out.println("内部类的实例变量值:" + this.prop);System.out.println("局部变量:" + prop);}}public void test(){InClass ic = new InClass();ic.info();}public static void main(String[] args){/** Test ts = new Test();* ts.test();* 上下的代码作用一样*/new Test().test();}
}

使用非静态内部类:

在外部类以外的地方定义内部类的语法格式: OuterClass.InnerClass  VarName

在外部类以外的地方创建非静态内部类实例的语法: OuterInstace .new  InnerConstructor()

class Out{class In{public In(String msg){System.out.println(msg);}}
}
public class CreateInnerInstance {public static void main(String[] args){//OuterClass.InnerClass varName = new OutInstance.new InnearConstructor();Out.In in = new Out().new In("测试信息");/*Out.In in;*Out out = new Out();*in2 = out.new In("测试信息");

     */       }
}

2.静态内部类

静态内部类是用static修饰的内部类,也称类内部类。

a。静态内部类不能访问外部类的实例成员,只能访问外部类的类成员(同为static 修饰)。

c。外部类依然不能访问静态内部类中的成员,但可以使用静态内部类的类名作为调用者来访问静态内部类中的类成员,也可以使用静态内部类对象作为调用者来访问静态内部类中的实例变量。

public class StaticInnerClassTest {private int prop = 5 ;private static int prop1 = 6 ;static class InClass{public void accessOuterProp(){

        private static int prop = 5;                                                                          private int prop1 = 6;         //System.out.println(prop);   //这句代码会出错,静态内部类无法访问外部类的非静态成员               

         System.out.println(prop1);}}    public void accessInnerPro(){  //通过静态内部类的类名访问静态内部类中的类成员

  System.out.println(InClass.prop);  //通过静态内部类对象作为调用者来访问静态内部类中的实例变量  SYstem.out.println(new InClass().prop1);    }}

在外部类以外使用使用静态内部类:(和使用非静态比较,相类似)
语法:   new OuterClass.InnerConstructor()

class Out{static class In{public In(){System.out.println("静态内部类的构造器");}}
}
public class CreateStaticInnerInstance {public static void main(String[] args){Out.In in = new Out.In();}
}

3.匿名内部类
如果把一个内部类放到方法中定义,则这个内部类就是一个局部内部类,局部内部类仅在该方法里有效。

定义匿名内部类的格式:

new 实现接口 | 父类构造器(实参列表)
{类体部分
}

可以看出,匿名内部类必须继承一个父类或者实现一个接口。

interface Product{public Double getPrice();public String getName();
}
public class AnonymTest {public void ce(Product p){System.out.println("购买了一个" + p.getName() + ",花掉了" + p.getPrice());}public static void main(String[] args){AnonymTest  at = new AnonymTest();at.ce(new Product() {@Overridepublic Double getPrice() {return 0.5;}@Overridepublic String getName() {return "辣条";}});}
}

转载于:https://www.cnblogs.com/mercuryli/p/4603311.html

Java 之 内部类相关推荐

  1. 反射-获取java私有内部类反射类型、私有字段

    获取JAVA私有内部类反射类型 方式一 Class.forName("外部类完整路径$内部私有类类名"); 方式二 通过获取对应私有内部类的字段而获取 完整的类名 Class.fo ...

  2. java使用内部类的好处及其初始化

    java使用内部类的原因 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响 java内部类初始化 ForeCatalog foreCa ...

  3. java继承a mya new c,“内部类” 大总结(Java),内部类总结java

    "内部类" 大总结(Java),内部类总结java (本文整理自很久以前收集的资料(我只是做了排版修改),作者小明,链接地址没有找到,总之感谢,小明) 内部类的位置: 内部类可以作 ...

  4. java 函数内部类_java 内部类详解 转

    classOuter {classInner { } } (二) 内部类的访问规则 ​ A:可以直接访问外部类的成员,包括私有 ​ B:外部类要想访问内部类成员,必须创建对象 (三) 内部类的分类 ​ ...

  5. java json 内部类_使用Fastjson解析内部类的一个小问题

    使用的Fastjson的版本是1.2.7和1.2.47两个版本. 1. 问题 使用Fastjson解析包含内部类的对象时,发生异常,代码大致如下: public class HelloControll ...

  6. java的内部类和匿名类剖析

    Java 1.1通过对Java语言规范进行修改,显着简化了一些实用结构的实现.在那些修改中,最引人注目的就是内部类和匿名类.如运用得当,它们可使程序更易理解和维护.本文介绍内部类和匿名类在Java代码 ...

  7. java 内部类 加载_举例讲解Java的内部类与类的加载器

    内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加 ...

  8. Java使用内部类的意义

    Java中的内部类感觉很奇怪,一个类中还要再嵌套一个类.为什么要这样做呢? 内部类提供了一个类中实现同一接口的多次机会. 一般情况下,在一个普通类中,是没有办法将一个方法写两遍,还能表达不同意思的,而 ...

  9. java(13)内部类

    内部类就是定义在类内部的类,可以使java具备为普通类实现多重继承的能力. 非静态内部类,局部内部类,静态内部类,匿名内部类 非静态内部类: package 内部类;class Wai5 {int i ...

  10. Java基础-内部类

    文章目录 普通内部类 1.内部类的基本形式 2.实例化一个内部类对象 局部内部类 匿名内部类 静态内部类 静态内部类的使用 内部类的四种形式: 普通内部类/成员内部类 局部内部类 匿名内部类 静态内部 ...

最新文章

  1. STM32F103C8/BT6最小系统原理图、PCB
  2. dataframe的重设index
  3. 坚果pro2s7.0.1系统更新截图(订阅号长截图测试)PhotoScape图片编辑器应用
  4. 聊聊storm TridentBoltExecutor的finishBatch方法
  5. SPARK安装二:HADOOP集群部署
  6. 根据二叉树的先序和中序求后序遍历
  7. java和python和php_Java、Python和PHP三者的区别
  8. 从深圳到底特律——我的出国求学之路
  9. plugin工程及与flutter工程通信原理
  10. Linux环境下如何编译C++程序
  11. Javascript面向对象编程与继承机制的设计思想(转)
  12. 各种PLC解密软件集合
  13. 数据驱动下的客群经营逻辑
  14. 7个人生工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则
  15. Win7更换锁屏和开机画面
  16. python春节对客流量的影响_春节对经济的影响
  17. 关于反向传播算法中几个公式的推导
  18. mysql 主从服务-主从复制数据一致性校验出现的问题
  19. Sdm660--OpenCamera流程详细分析(Camera1+Hal1)
  20. 短距离无线通信之蓝牙模块

热门文章

  1. long类型python_Python类型long vs C'long long'
  2. art-template模板引擎详解
  3. Express Cookie 的基本使用
  4. 二、数据预处理——缺失值处理
  5. 牛客 怕npy的牛牛(双指针)
  6. LeetCode 826. 安排工作以达到最大收益(map)
  7. LeetCode 658. 找到 K 个最接近的元素(二分查找)
  8. linux中top工具,Linux命令工具 top详解
  9. 计算机应用基础形考作业3Excel部分,计算机应用基础形考3,Excel部分
  10. python 动漫卡通人物图片大全_用Python把人物头像动漫化,不同的表情给你不同的惊喜...