java内部类

本文介绍了内部类相关知识,它可继承接口,提供进入外围类的窗口,是解决多重继承的方案,能随意访问外围类成员。还阐述了内部类的好处、匿名内部类、接口内的类等内容,以及内部类的特征,如可多个实例、独立于外围类等,此外提及闭包和回调概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关知识:

内部类继承自某个接口或实现某个接口,内部类的代码操作创建他的外围类的对象。内部类提供了进入外围类的窗口。

每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类没有影响。

内部类提供的、可以继承多个具体或抽象的类的能力,这是解决多重继承的解决方案。

因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。可以访问外围类的所有成员。

如同心脏可以直接访问身体的血液,而不是通过医生来抽血。

外部类将有一个方法,该方法返回一个指向内部类的引用。

如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须像在main()方法中一样,具体指明这个对象的类型:OuterClassName.InnerClassName.

需要生成对外部类对象的引用,可以使用外部类的名字后和.this。

 

用其他对象创建内部类对象,new语法

public class DotNew{
public class Inner{}
public static void main(String[] args){
DotNew dot = new DotNew();
DotNew.Inner dd = dot.new Inner();
}
}

内部类的好处:

实现了某类型的接口,于是可以创建并返回对其的引用。

要解决复杂的问题,想创建一个类来辅助解决方案,但不希望这个类是公共可用的。

 

匿名内部类:

public class testA{
  public Contents Contents{
    return new Contents{
      private int i =11;
      public int value(){
        return i;
       }
    }
  }

   public static void main(String[] args){
   testA aa =  new testA()
   Contents  cc = p.Contents();
   
  }
}

//等价
public class test{
class Myclass implements Contents{
  private int i =11;
  public int value(){
       return i;
     }
   }

   public Contents contents(){
    return new Myclass ();
  }

  public static void main(String[] args){
   test tt = new test();
   Contents  c = tt.contents();
   
  }
}

如果不需要内部类对象与其外围类对象之间有联系,可以将内部类声明为static,嵌套类。

创建嵌套类的对象,并不需要外围类的对象。

不能从嵌套类的对象中访问非静态的外围对象。

接口内的类:

创建某些公共代码,使得他们可以被某个接口的所有不同实现所共有,那么使用接口内部的嵌套类会显得方便。

 

内部类的一些特征:

内部类可以有多个实例,每个实例都有自己的状态信息。并且与其外围类对象的信息相互独立。

在单个外围类中,可以让不同的内部类以不同的方式实现同一个接口,或继承同一个类。

创建内部类对象并不依赖外围类对象。内部类就是一个独立的实体。

 

闭包:一个可调用的对象,记录了一些信息,这些信息来自于创建它的作用域。

回调:对象能够携带一些信息,这些信息允许他在稍后的某个时刻用初始的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值