内 部 类

目录

一.成员内部类

二.静态内部类

三.局部内部类

四.匿名内部类

五 Lambda概述


什么是内部类:就是在一个类的里面,再定义一个类;

内部类表示的事物是外部类的一部分,内部类单独出现没有什么意义。

内部类的访问特点:

  • 内部类可以直接访问外部类的成员,包括私有;
  • 外部类要访问内部类的成员,必须创建对象;

内部类的分类:

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

一.成员内部类

  • 写在成员位置上的,属于外部类的成员;
  • 成员内部类可以被一些修饰符所修饰,比如private,默认,protected,public,static等;
  • (protected:包的其他类,和其他包的子类都可以用)
  • 在成员内部类里面,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量;

(一).如何获取成员内部类对象:

1.在外部类中编写方法,对外提供内部类的对象;

2.在外界直接创建内部类的对象

创建格式:外部类名.内部类名 对象名=外部类对象.内部类对象;

(二).成员内部类如何获取外部类的成员变量;

public class Outer{

private int a=10;

class Inner{

private int a=20;

public void show(){

int a=30;

System.out..println(Outer.this.a);//10

System.out.println(this.a);//20

System.out.println(a);//30
//就近原则

}

}

}

外部类成员变量和内部类成员变量重名时,在内部类如何访问?

System.out.println(Outer.this.变量名);

二.静态内部类

静态内部类其实也是成员内部类的一种,在成员内部类前面用static修饰,此时就是静态内部类;

静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象 ;

例如:

public class Outer{

int a=10;

static int b=20;

static class Inner{

public void show1(){

Outer o=new Outer();

System.out.println(o.a);

System.out.println(b);

}

public static void show2(){

Outer 0=new Outer();

System.out.println(o.a);

System.out.println(b);

}

}

}

创建静态内部类对象的格式:外部类名.内部类名 对象名=new 外部类名.内部类名();

调用非静态方法的格式:先创建对象,用对象调用;

调用静态方法的格式:外部类名.内部类名.方法名();

三.局部内部类

1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。

2.外界是无法直接使用,需要在方法内部创建对象并使用。

3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

四.匿名内部类

1.匿名内部类本质上就是隐藏了名字的内部类;

可以写在成员位置,也可以写在局部位置。

2.格式:

new 类名或者接口名(){

重写方法;

};

例如:

new Run(){

@Override

public void Run(){

System.out.println("重写了跑步的方法");

}

};

3.格式细节:

包含了继承或实现,方法重写,创建对象。

整体就是一个类的子类对象或者接口的实现类对象。

4.使用场景:

当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,

如果实现类只要使用一次,就可以用匿名内部类简化代码。

五 Lambda概述

1.Lambda表达式是JDK开始后的一种新语法形式;

作用是:简化匿名内部类的代码写法;

(注意的是:Lambda表达式只能简化函数式接口的匿名内部类的写法格式)

2.Lambda表达式的简化格式:

(匿名内部类被重写方法的形参列表)->{

被重写方法的方法体代码。

}

3.什么是函数式接口?

首先必须是接口,其次接口中有且仅有一个抽象方式的形式。

通常我们会在接口上加上一个@FunctionalInterface注解,标记该接口必须是满足函数式接口。

4.Lambda表达式的省略写法

参数类型可以省略不写

如果只有一个参数,参数类型可以省略,同时()也可以省略

如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号;

此时,如果这行代码是return语句,必须省略return不写,同时也必须省略“,”不写。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值