Java的内部类总结
作者:淡沫初夏Zz 发布时间:2022-08-13 01:33:41
标签:Java,内部类
前言
最近看了内部类后,总结一下,首先内部类嵌套在其他内部的类,根据出现的位置和关键字,可以分为以下四种类:成员内部类,静态内部类,方法内部类,匿名内部类,接下来就介绍下这四种类,记得耐心看哦
一,成员内部类
1,成员内部类的特点
(1)private不可以用在外部类的声明,但可在内部类声明,成员变量可以是private
(2)内部类,外部类可以相互访问彼此的私有域
A:内部类访问外部类的私有域可以直接访问,因为成员内部类含有隐藏对象
B:外部类访问内部类的私有域通过内部类对象访问
(3)内部类可解决Java中单继承问题
(4)内部类可以对外部隐藏
2,成员内部类的实现
public class Outter { // 成员变量 private int age = 12; private String name = "zh"; private static final int A = 20; //成员内部类 class Inner{ private String a = "hello"; private int age = 20; public void test(){ System.out.println(a); // 可以访问外部类的私有域age System.out.println(Outter.this.age); //访问自己的age System.out.println(this.age); System.out.println(A); } } // 外部类成员方法 public void fun() { int a = 0; // 外部类内部创建内部类对象 Inner inner = new Inner(); System.out.println(inner.a); }}class Test { public static void main(String[] args) { //外部类的外部创建内部类对象 Outter.Inner inner = new Outter().new Inner(); }}public class Outter {
// 成员变量
private int age = 12;
private String name = "zh";
private static final int A = 20;
//成员内部类
class Inner{
private String a = "hello";
private int age = 20;
public void test(){
System.out.println(a);
// 可以访问外部类的私有域age
System.out.println(Outter.this.age);
//访问自己的age
System.out.println(this.age);
System.out.println(A);
}
}
// 外部类成员方法
public void fun() {
int a = 0;
// 外部类内部创建内部类对象
Inner inner = new Inner();
System.out.println(inner.a);
}
}
class Test {
public static void main(String[] args) {
//外部类的外部创建内部类对象
Outter.Inner inner = new Outter().new Inner();
}
}
3,内部类和外部类的关系
A:成员内部类的创建需要依赖于外部类对象
B:内部类和外部类之间相互独立
C:两者的私有属性可以相互访问
D:语法
(1)外部类的内部创建内部类对象
Inner inner = new Inner();
(2)外部类的外部创建内部类对象
Outter.Intter intter = new Outter().new Intter();
E:在内部类的内使用隐藏的this
二,静态内部类
1,静态内部类的特点
(1)定义在外部类的内部使用static修饰,静态内部类无需外部类无需外部类产生对象就可以使用
(2)静态内部类的创建语法
StaticInnerClass.Inner inner = new StaticInnerClass.Inner();
2,比较成员内部类和静态内部类
(1)成员内部类不能拥有静态域,但可以访问外部的静态域
(2)静态内部类可以拥有成员域,但不能访问外部的成员域
3,静态内部类的实现
public class StaticInnerClass {
static int age;
String name;
//静态内部类--类比--静态变量
static class Inner{
private int age;
public void test(){
System.out.println(age);
// System.out.println(name);不能访问外部成员域
}
}
public void fun() {
Inner inner = new Inner();
}
}
class Test1 {
public static void main(String[] args) {
StaticInnerClass.Inner inner = new StaticInnerClass.Inner();
}
}
三,方法内部类
1,方法内部类的特点
(1)方法内部类定义在方法内部
(2)对外部完全隐藏,因此不能有任何访问修饰
(3)若要方法的形参只能用,不能改(形参的隐式final声明)
2,方法内部类的实现
//方法内部类
public class FunClass {
private int age;
public void fun(int age) {
class Inner {
void fun() {
// System.out.println(age);
}
}
age = 10;
}
}
四, 匿名内部类
1,匿名内部类的特点
(1)匿名内部类定义在方法内部,类没有名字
(2)必须继承一个抽象类或者实现一个接口
(3)没有构造方法
2,匿名内部类的实现
//实现接口interface IMessage { void fun();}public class NonNameClass { public static void main(String[] args) { //匿名内部类 Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("hello A"); } }); Thread thread1 = new Thread({ System.out.println("hello "); } ); thread.start(); thread1.start(); }}//实现接口
interface IMessage {
void fun();
}
public class NonNameClass {
public static void main(String[] args) {
//匿名内部类
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello A");
}
});
Thread thread1 = new Thread({
System.out.println("hello ");
} );
thread.start();
thread1.start();
}
}
来源:https://blog.csdn.net/qq_55660421/article/details/122182560
0
投稿
猜你喜欢
- springboot配置文件中属性变量引用@@这种属性应用方式是field_name=@field_value@。两个@符号是springb
- Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的鼠标单击、按下键盘等操作。在Swing事件处理的过程中,主要涉及三类对象:
- 阿里终面在线编程题,写出来与大家分享一下 有一个单向链表
- 注:若是为了解决问题,可直接查看第二部分。1.安装与启动在下载安装前,请安装好JDK并配置好环境变量。ActiveMQ可到官网下载。点击进入
- 目录引言SqlSessionFactory不使用 XML 构建 SqlSessionFactorySqlSessionFactoryBuil
- 一、SpringBoot整合FastJson1.1、引入FastJson依赖包maven项目:<dependency> &nbs
- 日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这
- 首先在pom文件里引入mqtt的依赖配置<!--mqtt--> <d
- 网上很多资料在描述Java内存模型的时候,都会介绍有一个主存,然后每个工作线程有自己的工作内存。数据在主存中会有一份,在工作内存中也有一份。
- 1、普通用户与系统管理员用户的权限要有严格的区分。如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许
- java和javascript长得是如此地相像,那么它们是一回事儿吗?现在让我来揭晓答案吧!JavaScript 是一种嵌入式脚本文件,直接
- 本文实例为大家分享了Java实现简单幸运抽奖的具体代码,供大家参考,具体内容如下代码模块:User类:package test1;publi
- 前言链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表
- 前言在使用Java开发接口请求中,我们需要对请求进行进行统一返回值,这时候我们自己封装一个统一的Result返回类,下面就介绍下我用的这种的
- 前言本文是精讲RestTemplate第7篇,前篇的blog访问地址如下:RestTemplate在Spring或非Spring环境下使用精
- 闲来无事,用C++做了一个图书管理系统,主要有借书、还书、图书管理、用户管理等功能,主要用到的技术有容器和文件,以及类的封装#include
- 前言上一篇文章已经介绍了fluent-mybatis项目的构建,文章地址:Java Fluent Mybatis实战之构建项目与代码生成篇上
- 工具方法:本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据maven 引用jar包版本:<dependency&g
- maven配置项目的jdk版本无效排查最近在配置项目的jdk的时候发现在pom.xml中配置的1.8版本无效,maven更新后就变成了1.7
- 以下四种方式:1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象