黑马程序员_Java内部类学习笔记

本文详细介绍了C#中的内部类概念,包括定义、特性、种类以及为何需要内部类,通过实例展示了局部内部类、匿名内部类、嵌套类的应用场景,并解释了内部类的标示符命名规则。

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

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

一、定义:

一个类的定义放在另一个类的内部,这个类就称作内部类。

二、内部类的特性:

1.      它了解外围类,并能与之通信。

2.      当生成一个内部类的对象时,此对象与制造它的外围对象之间就有了一种联系,所以它能访问其外围对象的所有成员,而不需要任何特殊条件。此外,内部类还拥有其外围类的所有元素的访问权。

3.      内部类自动拥有对其外围类所有成员的访问权。

三、内部类的种类:

(1)局部内部类

在一个方法的作用域内创建一个完整的类,这个类成为局部内部类。

例如:

publicclassA{  

   publicvoid showA(){

      class B{}

   }

}

说明:外围类A中有个方法showA(),在showA()方法的作用域内定义了一个B类。

(2)匿名内部类

例如:

两种描述方法:

(1) 如果返回的对象是一个接口,那么该语法指的是创建一个实现自接口TestAInter的匿名类的对象。

例如:

//接口

publicinterfaceTestAInter{}

//类

publicclass TestA {

   private Stringa;

   public TestAInter getTestAInter(){

      returnnew TestAInter(){};

}

}

(2)如果返回的对象是一个接口,那么该语法指的是创建一个实现自TestAInter的匿名类的对象。

例如:

//类

publicclass TestB {}

//类

publicclass TestA {

   private Stringa;

   public TestB getTestAInter(){

      returnnew TestB(){};

}

}

匿名内部类创建构造器的方法

(3)嵌套类

一个内部类被声明为static,这个类通常称为嵌套类。

 

和普通内部类的区别:

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

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

(3) 普通内部类的字段和方法只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。但是嵌套类可以包含所有这些东西。

(4)接口内部类(放在接口中的类)

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

注意:放到接口中的任何类都自动地是public和static的。

四、为什么需要内部类?

每个内部类都能独立的继承自一个(接口的)实现,所有无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多重继承的解决方案变得完整。也就是说内部类允许继承多个非接口类型(类或抽象类)。

内部类会被覆盖吗?

在没有明确两个内部类是继承关系时,答案是不能覆盖的,因为每一个内部类是完全独立的实体。

局部内部类

局部内部类不能有访问说明符,因为它不是外围类的一部分;但是它可以访问当前代码块内的常量,以及此外围类的所有成员。

五、内部类标示符

内部类编译成class文件后的命名规则:

外围类的名字,加上“$”,再加上内部类的名字。如果内部类是匿名的,编译器会简单地产生一个数字作为其标示符。如果内部类是嵌套在别的内部类之中,只需直接将它们的名字加载其外围类标示符与“$”的后面。 

例如:

Counter.class,无内部类。

LocalInnerClass$1.class,类LocalInnerClass中有一个匿名内部类。

LocalInnerClass$LocalCounter.class,类LocalInnerClass中有一个内部类LocalCounter

 

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://www.itheima.com" target="blank">www.itheima.com</a> 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值