文章目录

  • 内部类
    • 内部类概述
    • 静态内部类
    • 成员内部类

内部类

内部类概述

内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)

// 外部的People类可以理解成宿主
public class People {// 内部的Student类可以理解成寄生class Student {}
}

内部类的使用场景、作用

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计。

内部类通常可以方便访问外部类的成员,包括私有的成员。

内部类提供了更好的封装性,内部类本身就可以用private protectecd等修饰,封装性可以做更多控制。

内部类的分类

静态内部类[了解]

成员内部类(非静态内部类) [了解]

局部内部类[了解]

匿名内部类(重点)

静态内部类

介绍:

有static修饰,此内部类属于外部类本身。

它的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已。

静态内部类格式:

public class Outer{// 静态成员内部类public static class Inner{}
}

静态内部类创建对象的方法:

格式: 外部类名.内部类名 对象名 = new 外部类名.内部类构造器;

例子: Outer.Inner in = new Outer.Inner();

基本代码演示:

在外部类Outer下定义静态内部类Inner

package com.chenyq.d8_innnerclass;/**外部类*/
public class Outer {/**静态内部类: 加static修饰*/public static class Inner {}
}

在内部类Inner下可以和外部类一样, 可以定义变量和方法

package com.chenyq.d8_innnerclass;/**外部类*/
public class Outer {/**静态内部类: 加static修饰*/public static class Inner {// 实例成员变量private String name ;// 静态成员变量public static int age;// 无参构造器public Inner() {}// 有参构造器public Inner(String name) {this.name = name;}// 定义实例方法public void show1() {System.out.println("内部类实例方法");}// 定义静态方法public static void show2() {System.out.println("内部类静态方法");}// getter和setter方法public String getName() {return name;}public void setName(String name) {this.name = name;}}
}

在Test中使用Inner内部类

package com.chenyq.d8_innnerclass;public class Test {public static void main(String[] args) {// 创建内部类实例对象Outer.Inner inr = new Outer.Inner("chenyq");Outer.Inner.age = 20;System.out.println(inr.getName()); //chenyqSystem.out.println(Outer.Inner.age); // 20inr.show1(); // 内部类实例方法Outer.Inner.show2(); // 内部类静态方法}
}

静态内部类的访问拓展:

1、静态内部类中是否可以直接访问外部类的静态成员

可以,外部类的静态成员只有一份可以被共享访问。

2、静态内部类中是否可以直接访问外部类的实例成员

不可以的,外部类的实例成员必须用外部类对象访问。

静态内部类的使用场景、特点、访问总结:

如果一个类中包含了一个完整的成分,如汽车类中的发动机类。

特点、使用与普通类是一样的,类有的成分它都有,只是位置在别人里面而已。

可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。

注意:开发中实际上用的还是比较少。

成员内部类

什么是成员内部类?

无static修饰,属于外部类的对象。

JDK16之前,成员内部类中不能定义静态成员,JDK 16开始也可以定义静态成员了。

成员内部类格式:

public class Outer {// 成员内部类public class Inner {}
}

成员内部类创建对象的方法:

成员内部类是属于外部类的实例对象的, 因此需要先new外部类(), 得到外部类实例后再外部类实例.new 内部类

格式: 外部类名.内部类名 对象名 = new 外部类构造器().new 内部类构造器();

范例: Outer.Inner in = new Outer().new Inner();

基本代码演示:

定义外部类Outer和内部类Inner

package com.chenyq.d9_innnerClass;/**外部类*/
public class Outer {/**成员内部类: 不加static修饰*/public class Inner {}
}

定义内部类的变量和函数

注意: JDK 16开始支持在成员内部类中定义静态成员方法, JDK 16之前是不支持的

package com.chenyq.d9_innnerClass;/**外部类*/
public class Outer {/**成员内部类: 不加static修饰*/public class Inner {// 定义实例成员变量private String name;// 定义静态成员变量public static int age; // JDK 16开始支持定义静态成员了(静态成员变量和静态成员方法都是JDK 16开始支持的)// 定义有参和无参构造器public  Inner() {}public Inner(String name) {this.name = name;}// 定义实例成员方法public void show1() {System.out.println("成员内部类的实例成员方法");}// 定义静态成员方法public static void show2() {System.out.println("成员内部类的静态成员方法");}// 定义setter和getter方法public String getName() {return name;}public void setName(String name) {this.name = name;}}
}

在Test类中使用成员内部类

package com.chenyq.d9_innnerClass;public class Test {public static void main(String[] args) {// 获取Inner内部类实例对象Outer.Inner inr = new Outer().new Inner("chenyq");// 使用内部类的变量和方法Outer.Inner.age = 18;System.out.println(inr.getName());System.out.println(Outer.Inner.age);inr.show1();Outer.Inner.show2();}
}

成员内部类的访问拓展:

1、成员内部类中是否可以直接访问外部类的静态成员

可以,外部类的静态成员只有一份可以被共享访问。

2、成员内部类的实例方法中是否可以直接访问外部类的实例成员

可以的,因为外部类的实例成员是属于外部类的实例对象的; 而创建成员内部类, 必须先有外部类对象,才能有成员内部类对象,所以可以直接访问外部类对象的实例成员。

总结:

1.成员内部类是什么样的、有什么特点?

无static修饰,属于外部类的对象。

可以直接访问外部类的静态成员,实例方法中可以直接访问外部类的实例成员。

2.成员内部类如何创建对象?

外部类名.内部类名 对象名 = new 外部类构造器().new 内部类构造器();

Java内部类介绍 - 静态内部类和成员内部类相关推荐

  1. java内部类和静态内部类的区别

    1 相同点 使用的时候,import的时候,除了包名,还要带外部类. 2 不同点 2.1 对象创建的方式不同 静态内部类创建对象的时候,独立于外部类及其对象,就好像它是一个独立的类,可以和外部类一样使 ...

  2. Java内部类与静态内部类

    http://hi.baidu.com/zhumulangma/item/bcd478c140427b2cef466532 定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明pub ...

  3. java 内部类和静态内部类的区别

    private class InnerClass {         // 只有在静态内部类中才能够声明或定义静态成员         // private static String tt = &q ...

  4. android访问静态内部类,Java 内部类详解

    一 内部类是什么 Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种. Java为什 ...

  5. 看到如此详细的Java内部类,我泪目了

    Java内部类 介绍 定义 成员内部类 语法格式 使用说明 代码示例 局部内部类 语法格式 使用说明 代码示例 匿名内部类 语法格式 使用说明 代码示例 静态内部类 语法格式 使用说明 代码示例 介绍 ...

  6. 1.14 java内部类是什么鬼东西

    在类内部可定义成员变量和方法,且在类内部也可以定义另一个类.如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称 ...

  7. java内部类实现方式_Java内部类详解

    一 内部类是什么 Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种. Java为什 ...

  8. Java内部类是什么?

    在类内部可定义成员变量和方法,且在类内部也可以定义另一个类.如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称 ...

  9. java内部类是干什么的_Java内部类有什么作用

    Java内部类有什么作用 ?java内部类介绍.java内部类有什么好处?为什么需要内部类? 1.举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参 ...

最新文章

  1. Linux拷贝排除一个或多个目录的实现方法
  2. Kendall Rank(肯德尔等级)相关系数
  3. 如何调用webservice接口
  4. php fpm xcache,php扩展xcache
  5. 循环结构程序设计(算法竞赛入门经典)课后题
  6. ACM试题 - 另一种阶乘问题
  7. 时槽越大越好吗_买桃子是“越大越好”吗?老果农:教你一招,保准桃子又甜又好吃...
  8. 程序员问答网站:StackOverflow
  9. 管理账目的计算机软件有哪些,最好的记账软件哪个好
  10. java调节音量_调节音量的流程
  11. python逆序输出字符串_Python实现字符串逆序输出功能示例
  12. 区块链会员积分系统如何构建及应用逻辑
  13. kthreaddk病毒查杀记录
  14. Openjudge1.5答案
  15. 中信建投计算机行业周报
  16. mail163邮箱个人登录入口在哪里?
  17. 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化
  18. 【ios】Settings 设置项
  19. 使用TorchText库进行文本分类
  20. 【连载】IOS开发-图形渲染(一)

热门文章

  1. Android Gradle排除依赖模块的某个类
  2. Block Design内部BRAM控制器与外部BRAM的连接
  3. C#毕业设计——基于C#+asp.net+sqlserver在线论文提交系统设计与实现(毕业论文+程序源码)——在线论文提交系统
  4. 西工大计算机夏令营面试
  5. 计算机控制实验PID数字控制器设计,实验二数字PID控制器的设计
  6. 安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例
  7. c语言程序个人实验报告,C语言程序设计实验报告(5)
  8. 前端checkbox
  9. 华为信息中心配置命令,很全
  10. linux:redis安装、报错 oO0OoO0OoO0Oo