由浅到深认识Java语言(17):内部类

本文介绍了Java中的内部类概念,包括成员内部类、静态内部类和局部内部类,以及它们在SpringBoot项目中的应用。文章还通过实例展示了如何使用抽象类和接口。接下来将探讨权限修饰符、包和Object类的相关知识。
摘要由CSDN通过智能技术生成

该文章Github地址:https://github.com/AntonyCheng/java-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(16):接口

27.内部类(内部类:类的第五成员)

内部类定义

面向对象的重点是类的设计,类的设计重点是设计类的成员;

内部类是类的第五大成员,由于类中有一些成员没有办法简单地通过一个属性或者一个方法就能完全描述;

比如一个人类,脑袋就能成为一个内部类:

class Person{
	String name;
	int age;
	class brain{  //内部类
		String n;
		int a;
		public(){};
	}
}

内部类分类

  • 成员内部类:普通成员内部类,静态成员内部类;
  • 局部内部类:普通的局部内部类,匿名的局部内部类

局部内部类

局部内部类是定义在方法内部的类;

局部内部类的应用场景:

往往一个方法需要返回一个抽象类或者接口的对象,对于我们来说有两种解决方案;

一是在类的外部定义一个抽象类的子类,或者接口的实现类,但是在类的外部定义的这个类只用了这一次,所以这样定义在外部会消耗更多的资源;

二是在类的内部定义一个内部类,此时这个类就是一个局部内部类;

接口:

正常写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		getMyInterface();
	}
	public static MyInterface getMyInterface() {   //3.进行抽象类的创建
		MyInterface mif = new MyInterfaceImpl();  //4.运用多态
		mif.m1();
		return mif;
	}
}

interface MyInterface {   //1.接口,也是一个极端的抽象类
	void m1();
}

class MyInterfaceImpl implements MyInterface {   //2.将接口转为普通类
	@Override
	public void m1() {
		// TODO Auto-generated method stub
		System.out.println("  学校  ");
	}
}

内部类写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		getMyInterface();
	}
	public static MyInterface getMyInterface() {
		class MyInterfaceImpl implements MyInterface {  //将外部类转为内部类
			@Override
			public void m1() {
				// TODO Auto-generated method stub
				System.out.println("  学校  ");
			}
		}
		MyInterface mif = new MyInterfaceImpl();
		mif.m1();
		return mif;
	}
}

interface MyInterface {
	void m1();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

抽象类:

正常写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		Student();
	}

	public static Person Student() {
		Person Stu = new Student();
		Stu.show();
		return Stu;
	}
}

abstract class Person {
	public abstract void show();
}

class Student extends Person {
	@Override
	public void show() {
		// TODO Auto-generated method stub
		System.out.println("Student.show()");
	}
}

内部类写法:

package top.sharehome.Bag;

public class Demo {
	public static void main(String[] args) {
		Student();
	}
	public static Person Student() {
		class Student extends Person{
			@Override
			public void show() {
				// TODO Auto-generated method stub
				System.out.println("Student.show()");
			}
		}
		Person Stu = new Student();
		Stu.show();
		return Stu;
	}
}

abstract class Person{
	public abstract void show();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

匿名内部类

局部内部类的类名并不是很重要,可以直接简化,就有了下面的匿名内部类,这个就好似类与抽象类的关系,在匿名内部类中继承(实现)了父类;

基本格式:

//对象名 变量名 = new 对象名(){
//		方法的重写:
//}
//例如下:
Animal a = new Animal(){
    public void show(){
        
    }
};  //注意:!!!!这里有一个分号!!!!
abstract class Animal{
    public abstract void show(){
        
    }
}

将局部内部类的实例改写如下:

接口

package top.sharehome.Bag;

public class Demo {
    public static void main(String[] args) {
        MyInterfaceImpl();
    }
	public static MyInterface MyInterfaceImpl() {
		MyInterface mif = new MyInterface() {
			@Override
			public void m1() {
				// TODO Auto-generated method stub
				System.out.println("  学校  ");
			}
		};
		mif.m1();
        return mif;
	}
}

interface MyInterface{
	void m1();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

抽象类:

package top.sharehome.Bag;

public class Demo {
    public static void main(String[] args) {
        Student();
    }
	public static Person Student () {
		Person Stu = new Person() {
			@Override
			public void show() {
				// TODO Auto-generated method stub
				System.out.println("Student.show()");
			}
		};
		Stu.show();
        return Stu;
	}
}

abstract class Person {
	public abstract void show();
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识Java语言(18):权限修饰符&包&Object类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值