内部类(下)匿名内部类,静态内部类的使用

文章目录


前言

该文将会介绍匿名内部类、静态内部类的使用,补充完毕java中的内部类。补充内容为向上转型为接口、使用this关键字获取引用、内部类的继承。


一、匿名内部类

定义:没有名称的内部类。

语法:

java 复制代码
return new A(){
    //匿名内部类
    //该匿名内部类的外部类为:A
}

或者为:

java 复制代码
ParentClass obj = new ParentClass(){
    //创建了一个以ParentClass为外部类的匿名内部类
    //实现代码
};

注:该匿名内部类的外部类为 A。在实例化该外部类时,同时实例化了该匿名内部类。

实例:

java 复制代码
public class Demo3 {
	public OutInterface2 action(){
		//实例化接口OutInterface2
		return new OutInterface2() {
			/*在 return 语句中编写一个返回值为实例化的一个外部类 OutInterface2,
			 *java中最常用的内部类
			 创建了一个匿名内部类,由于该内部类没有名字,所以被称为"匿名"
			 						*/
			private int i =0;
			public int getValue() {
				return i;
            //匿名内部类的成员变量和成员方法
			}
		};	//匿名内部类{}结尾需要一个 ; 符号
	}
}	

规则1:匿名内部类定义结束后 ,需要加分号 ; 加以标识,这个分号并不表示内部类的结束,而是代表匿名内部类的创建。

规则2: 匿名内部类的外部类为,return new 语句中的实例化的类。

规则3: 匿名内部类没有名字。

二、静态内部类

定义: 在内部类前添加 static 关键字修饰。

语法:

java 复制代码
class OuterClass {
    // 外部类的成员和方法
     static class StaticInnerClass {
        // 静态内部类的成员和方法
    }
}

规则1:如果创建静态内部类的对象,不需要其外部类的对象,直接在其中声明 static成员即可。

java 复制代码
public class Demo4 {
	
	static class innerClass4{
        //创建了一个静态内部类
	}
	static innerClass4 n = new innerClass4();
    //在外部类中创建了一个静态内部类的对象
}

**规则2:不能从静态内部类的对象中访问非静态外部类的对象。**不可以使用外部类的非静态成员。(因为静态区不能调用非静态区)

**规则3:main静态方法可以在静态内部类中使用。**与在主方法中使用的main静态方法,实现效果一致。例如,system.out.println 语句输出内容,都会在控制台输出。

java 复制代码
public class Demo4 {
	
	static class innerClass4{
        //这里是一个静态内部类
		public static void main(String[] args) {
            //静态方法中使用println
			System.out.println("我是静态内部类");
		}
	}
}

输出结果:

问题: 进行程序测试时,如果每一个Java文件中都设置一个主方法,将出现很多额外代码,而程序本身不需要这些主方法,该怎么做呢?

解决方法:将多个主方法写入几个静态内部类,主要作用是, 方便进行调试

三、内部类的继承

内部类的继承

语法:class 子类 extends 外部类.内部类

java 复制代码
class OutputInnerClass extends ClassA.ClassB{
    //OutputInnerClass 继承了ClassA的内部类ClassB
  	public OutputInnerClass(ClassA a){
	    a.super();
    }
    //类继承内部类必写的一个构造方法
}

注: ***在某个类继承内部类时,必须硬性创建这个子类一个带参数的构造方法,并且该构造方法的参数为需要继承的内部类的外部类的引用,同时在构造方法体中通过该参数,使用 super() 方法。***调用了这个外部类,才能继承其中的内部类。

**问题:**匿名内部类没有名字,那么其他类该怎么继承该内部类呢?

**解决方法:**定义一个实现了某个接口的匿名内部类,通过内部类覆写接口的抽象方法,然后在其他类中继承这个匿名内部类。

实例:

java 复制代码
interface MyInterface {
    void doSomething();
}
 class MyClass {
    MyInterface myInterface = new MyInterface() {
        
        public void doSomething() {
            System.out.println("Doing something in anonymous inner class.");
        }
    };
}
 class MySubClass extends MyClass {
    // 可以使用 myInterface 对象调用 doSomething 方法
}

总结

本文简单介绍了匿名内部类、静态内部类,以及内部类的继承。补充完整了内部类的使用。如果读者对文章所提到的内容有什么疑问或补充,欢迎在评论区中评论,博主会及时进行反馈的。

相关推荐
胡耀超13 分钟前
5、Python-NumPy科学计算基础
开发语言·人工智能·python·深度学习·numpy
得物技术13 分钟前
0基础带你精通Java对象序列化--以Hessian为例|得物技术
java·后端·编程语言
点灯小铭16 分钟前
基于MATLAB的车牌识别系统
开发语言·单片机·数码相机·matlab·毕业设计·课程设计
橘子在努力19 分钟前
【橘子SpringCloud】OpenFegin源码分析
java·spring boot·spring·spring cloud
我是廖志伟26 分钟前
JVM新生代Eden区域深度解析
java·jvm·memory management
十八旬42 分钟前
苍穹外卖项目实战(day7-2)-购物车操作功能完善-记录实战教程、问题的解决方法以及完整代码
java·开发语言·windows·spring boot·mysql
BIGSHU09231 小时前
java多线程场景3-并发处理和异步请求
java·开发语言·python
_OP_CHEN1 小时前
数据结构(C语言篇):(十一)二叉树概念介绍
c语言·开发语言·数据结构·二叉树·学习笔记··
lssjzmn1 小时前
构建实时消息应用:Spring Boot + Vue 与 WebSocket 的有机融合
java·后端·架构
渣哥1 小时前
Java ConcurrentHashMap vs Hashtable:差异、性能与应用场景
java