Java内部类介绍 - 静态内部类和成员内部类
文章目录
- 内部类
- 内部类概述
- 静态内部类
- 成员内部类
内部类
内部类概述
内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。
// 外部的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内部类介绍 - 静态内部类和成员内部类相关推荐
- java内部类和静态内部类的区别
1 相同点 使用的时候,import的时候,除了包名,还要带外部类. 2 不同点 2.1 对象创建的方式不同 静态内部类创建对象的时候,独立于外部类及其对象,就好像它是一个独立的类,可以和外部类一样使 ...
- Java内部类与静态内部类
http://hi.baidu.com/zhumulangma/item/bcd478c140427b2cef466532 定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明pub ...
- java 内部类和静态内部类的区别
private class InnerClass { // 只有在静态内部类中才能够声明或定义静态成员 // private static String tt = &q ...
- android访问静态内部类,Java 内部类详解
一 内部类是什么 Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种. Java为什 ...
- 看到如此详细的Java内部类,我泪目了
Java内部类 介绍 定义 成员内部类 语法格式 使用说明 代码示例 局部内部类 语法格式 使用说明 代码示例 匿名内部类 语法格式 使用说明 代码示例 静态内部类 语法格式 使用说明 代码示例 介绍 ...
- 1.14 java内部类是什么鬼东西
在类内部可定义成员变量和方法,且在类内部也可以定义另一个类.如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称 ...
- java内部类实现方式_Java内部类详解
一 内部类是什么 Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种. Java为什 ...
- Java内部类是什么?
在类内部可定义成员变量和方法,且在类内部也可以定义另一个类.如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称 ...
- java内部类是干什么的_Java内部类有什么作用
Java内部类有什么作用 ?java内部类介绍.java内部类有什么好处?为什么需要内部类? 1.举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参 ...
最新文章
- Linux拷贝排除一个或多个目录的实现方法
- Kendall Rank(肯德尔等级)相关系数
- 如何调用webservice接口
- php fpm xcache,php扩展xcache
- 循环结构程序设计(算法竞赛入门经典)课后题
- ACM试题 - 另一种阶乘问题
- 时槽越大越好吗_买桃子是“越大越好”吗?老果农:教你一招,保准桃子又甜又好吃...
- 程序员问答网站:StackOverflow
- 管理账目的计算机软件有哪些,最好的记账软件哪个好
- java调节音量_调节音量的流程
- python逆序输出字符串_Python实现字符串逆序输出功能示例
- 区块链会员积分系统如何构建及应用逻辑
- kthreaddk病毒查杀记录
- Openjudge1.5答案
- 中信建投计算机行业周报
- mail163邮箱个人登录入口在哪里?
- 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化
- 【ios】Settings 设置项
- 使用TorchText库进行文本分类
- 【连载】IOS开发-图形渲染(一)
热门文章
- Android Gradle排除依赖模块的某个类
- Block Design内部BRAM控制器与外部BRAM的连接
- C#毕业设计——基于C#+asp.net+sqlserver在线论文提交系统设计与实现(毕业论文+程序源码)——在线论文提交系统
- 西工大计算机夏令营面试
- 计算机控制实验PID数字控制器设计,实验二数字PID控制器的设计
- 安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例
- c语言程序个人实验报告,C语言程序设计实验报告(5)
- 前端checkbox
- 华为信息中心配置命令,很全
- linux:redis安装、报错 oO0OoO0OoO0Oo