java 类有什么用_Java 中的内部类有什么用?

ab41ac491821f693c4772c95051d86b9.png

文章目录

什么是内部类 把类定义在另一个类的内部,该类就被称为内部类.

非常重要的一点是,内部类能够访问外部类的所有成员,包括private修饰的.

为什么需要内部类

Java的内部类让我很容易的想起来JavaScript的闭包,闭包就是定义在一个函数内部的函数——这听起来和Java的内部类定义一样一样的.

本质上,闭包是将函数内部与函数外部连接起来的桥梁.

内部类一样,它是将内部类与外部类连接起来的桥梁.

内部类有何优势 内部类可以直接访问外部类中的成员(包括私有成员),

内部类可以独立地继承一个抽象类或者实现一个接口,无论外部类是否也这样做了,对内部类都没有影响.

可以模拟实现多继承

我们知道C++中是多继承,java是单继承,利用内部类我们可以模拟实现java的多继承

public abstract class F{

}

public abstract class F1{

}

public Class Outer{

class Fextends extends F{

}

class F1extends extends F1{

}

private F f;

private F1 f1;

}

上面Outer 类简单的实现了多继承.

内部类的分类

静态内部类

被 static 所修饰的内部类,按位置分,属于成员内部类.

但也可以称作静态内部类,也常叫做嵌套内部类.

即使没有外部类对象,也可以创建静态内部类对象,而外部类的非static成员必须依赖于对象的调用,静态成员则可以直接使用类调用,不必依赖于外部类的对象,所以静态内部类只能访问静态的外部属性和方法.

class Outter{

int age = 10;

static age2 = 20;

public Outter(){

}

static class Inner{

public method(){

System.out.println(age);//错误

System.out.println(age2);//正确

}

}

}

public class Test{

public static void main(String[] args){

Outter.Inner inner = new Outter.Inner();

inner.method();

}

}

上面程序输出结果中,method() 只能访问 age2 变量,因为内部静态类只能访问静态的外部属性和方法.

匿名内部类

一个没有名字的类,是内部类的简化写法

new 类名或者接口名() {

重写方法();

}

本质:其实是继承该类或者实现接口的子类匿名对象

interface Inner{

public abstract void show();

}

class Outer{

public void method(){

new Inner() {

public void show(){

System.out.println("HelloWorld");

}

}.show();

}

}

class Test{

public static void main(String[] args){

Outer o = new Outer();

o.method();

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值