JavaSE——基础知识回顾11之内部类(尽量了解,不推荐精通)

文章目录



前言

本次任务的学习目标是内部类的学习,这个内容有点烧脑,尽量尽自己的努力去熟悉就好,这是我对自己的一个小任务,由于内部类在以后的项目开发中出现的比较少(但是不排除有些倒霉蛋开发者遇到的次数较多),我就没有做太多的解释了。


话不多说开始干!!

一、内部类是什么?

首先,当我们看到“内部类”这个名字的时候我们就应该想到一些关于它的特点了吧,顾名思义,内部类,存在于类的内部的类,那么它究竟是何方神圣,又有什么用呢?以及它的触发机制和用处。

示例图如下

在这里插入图片描述

(1)走进内部类

概念:在一个类的内部所定义的类称为内部类。内部类允许把一些逻辑相关的类组织在一起,并且控制内部类的可视性。

(2)内部类的分类

内部类分为两类:
1、成员内部类:A、实例内部类 B、静态内部类
2、局部内部类:匿名内部类(最麻烦的就是这个东西)
3、静态内部类
4、匿名内部类
提醒:成员内部类的访问修饰符跟成员变量是一样的,可以是默认(default),private,protected,public

1、内部类的特点

1、编译后可以生成独立的字节码文件
2、内部类可直接访问外部类的私有成员,而不破坏封装
2、可为外部类提供必要的内部功能组件

(3)使用内部类

1、创建一个内部类

//外部类
public class Outter {
	
	private 	String str1 = "aaa";
				String str2 = "bbb";
	protected 	String str3 = "ccc";
	public 		String str4 = "ddd";
	final 		String str5 = "eee";
	static 		String str6 = "fff";
	

	//成员内部类
	class Inner{
		
		private String str1 = "成员内部里的属性~~~";
		
		public void method(){
			System.out.println("成员内部类里的方法");
			System.out.println(this.str1);
			System.out.println(Outter.this.str1);//调用外部类的属性
			System.out.println(str2);//Outter.this.str2
			System.out.println(str3);//Outter.this.str3
			System.out.println(str4);//Outter.this.str4
			System.out.println(str5);//Outter.this.str5
			System.out.println(str6);//Outter.str6
		}
	}
	
}
public class Test01 {
	
	public static void main(String[] args) {
		/**
		 * 知识点:内部类
		 * 含义:一个类里面声明一个类
		 * 
		 * 分类:
		 * 	1.成员内部类
		 * 		特点:可以调用外部类中所有的属性
		 * 	2.静态内部类
		 * 	3.接口内部类
		 * 	4.局部内部类
		 * 	5.匿名内部类
		 */		
		//创建成员内部类对象
		Inner inner = new Outter().new Inner();
		//调用方法
		inner.method();	
	}
}

2、案例演示(尽量了解,说不定以后会有面试呢)

public class Outer{
   public class InnerTool{
      public int add(int a, int b){
         return  a+b;
      }
   }
   private InnerTool inner =new InnerTool();
   public int add(int a,int b){
           return inner.add(a,b);
   }
   public static void main(String[] args){
             //通过外部类计算结果
             Outer out=new Outer();
             System.out.println(outer.add(1,7));
             //通过内部类的计算结果,此处实例化内部类比较麻烦也比较难以理解,需要多多练习
             Outer.InnerTool inner=new Outer().new InnerTool();
             //另一种写法
             Outer.InnerTool inner2=new Outer().new InnerTool();
             System.out.println(inner2.add(1,7));
   }
}

成员内部类-静态内部类

//创建静态内部类的实例,无序创建外部类的实例,详见案例
//要注意下面创建静态内部类实例的方式
public static Outer4{
      public static class Inner4{
           int a=1;
    }
     public static void main(String[] args){
        Outer4.Inner4 inner =new Outer4.Inner4();
        System.out.print(inner.a);
     }
}
//注意:静态内部类是可以直接访问到外部类的非静态成员变量

(4)匿名内部类的解读

1、什么是匿名内部类

没有类名的局部内部类(一切特征都与局部内部类相同)
必须继承一个父类或者实现一个接口
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象

2、匿名内部类的优缺点

优点:减少代码量
确定:可读性较差

(5)局部内部类的解读

定义在外部类方法中,作用范围和创建对象范围仅限于当前方法

局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final
限制类的适用范围

(6)静态内部类的解读

不依赖外部类对象,可以直接创建或通过类名访问,可声明静态成员
只能直接访问外部类的静态成员(实例成员需实例化外部类对象)
Outer.Inner inner=new Outer.Inner();
Outer.Inner.show();

(7)成员内部类

在类的内部定义,与实例变量、实例方法同级别的类
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
Outer out =new Outer();
Outer.Inner in=out.new Inner();

当外部类、内部类存在重名属性时,会邮箱访问内部类的属性
成员内部类不能定义静态成员

(5)内部类的运行内存实况:

对于每一个内部类来说。java编译器都会为其生成独立的类文件(.class),即在JVM内存空间中有对应的开辟控件与之对应,其次内部类在被访问的时候是不会破坏掉封装下的外部类的,安全性更高,但复杂度也很高。

总结

今天的内容比较复杂,但是最好只作为一个了解就好,其实内部类总共分七种,而我只列举了两种比较常见的,也是可能会被使用到的,所以今天就到这里吧。本部分内容属于常用类模块的一部分,等下一次我将把剩下的比较重要的内容发布出来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sugar-free->小粽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值