java内部类总结

内部类

内部类就是类中的类

内部类分类:

  1. 成员
  2. 局部
  3. 匿名
  4. 静态

成员内部类

定义:定义在外部类成员位置的类,用成员修饰符修饰的一个类

使用成员内部类:根据外部类对象使用,注意成员内部类不能定义静态 ,除非是静态的常量(由static final 修饰)

//创建内部类对象
public class Outer1 {
	//这是一个成员内部对象
	class One{
	//内部对象的方法
		void t() {
			System.out.println("我是一个内部类");
		}
	}
	
	public static void main(String[] args) {
    // 在主方法中创建内部类对象方法一
	Outer1 otOuter1=new Outer1();
	One on=otOuter1. new One();
    // 在主方法中创建内部类对象方法二
    One on=new Outer1().new One();
	on.t();
	}
	 public void  show() {
         //在外部方法中创建内部类对象
			One one=new One();
			one.t();
	 }
}

注意:如外部类,内部类,内部类方法三者都有一个变量a ,在内部类中直接返回a是值内部类方法中的a(就近原则)this.a ,返回的是内部类的成员变量a ,要返回外部类的变量a 需要用外部类名.this.a

局部内部类

定义:定义在外部类方法中的内部类,局部内部类的左右域只在方法内,只能在方法内床架对象

注意,局部内部类的变量只能用final修饰,jdk1.8 默认省略final

静态内部类

定义:由static 修饰的类,静态类中可以写静态方法,静态方法只能写在静态类中

特点:静态类中的静态方法与静态变量,可以直接通过类名. 的方式直接在外部调用

注意: 静态类中可以有成员,调用时要遵守静态原则,静态方法不能直接调用成员属性,

需要通过对象调用成员属性 调用外部成员需要用对象.的方式调用

匿名内部类

定义:没有名字的内部类

前提:匿名内部类必须实现一个接口/父类,作为接口/父类的实现存在

// 匿名内部类
new 类名(){类体}

使用: 在使用时可以使用父类/接口类型 接收这个匿名内部类(接口多态)

// 匿名内部类
// 接口(父类类型) 接收名称=  new 类名(){类体}
// 接收名称.方法();  	

主要:调用的方法是对父类/接口实现的方法

Lambda 由jdk1.8提供

表示方式:()->{方法体}

// '()':表示需要重写的方法参数列表
// '->':Lambda 符号,具有推导上下文的作用
// '{}':存放需要实现的方法的方法体

前提:只使用接口类型 的内部类写法,且接口只有一个方法

测试是否为函数式接口:@FunctionalInterface

写法:

//标准写法  下方‘ S ’ 接收匿名类地址的 变量
  s=(数据类型 参数)->{方法体};
//只存在一句方法体时
  s=(数据类型 参数)->方法体;
//参数的数据类型可以不写
  s=(参数)->{方法体};
//只有一个参数
  s=参数->方法体;
//方法有返回值
  s=(数据类型 参数)->{方法体 retuen 返回值 ;};
//当语句体只有返回值没有方法体时
  s=(数据类型 参数)->retuen 返回值 ;

转载于:https://my.oschina.net/u/4165837/blog/3086482

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值