内部类
来源:互联网 发布:浙江大学软件学院硕士 编辑:程序博客网 时间:2024/05/14 08:27
学java时,我们学到内部类时,常常容易搞混几种内部类,下面我们来看看一下,这几种内部类的区别,及特征。
1) 成员内部类
:类的声明与外部类的其它成员(属性、方法……)在外部类的结构上是同等级别的。例如:
public class OutterClass { private int i; public void test() { InnerClass ic = new InnerClass(); } private class InnerClass { }}
由于成员内部类是外部类的一部分,所以,在没有创建出外部类的对象之前,不可以创建内部类的对象。
由于成员内部类是外部类的“成员”,所以,可以使用任何访问权限修饰符进行修饰。
2) 静态(成员)内部类
:使用了static进行修饰的成员内部类。
public class OutterClass { private int i; public void test() {} private static class InnerClass { }}
由于静态成员可以直接加载到内存,所以,可以在不创建外部类的对象时,直接创建静态内部类的对象。
由于静态内部类使用了static修饰符,则在静态内部类中,无法直接访问外部类的非静态成员。
3) 局部内部类
:在方法中编写的内部类。例如:
public class OutterClass { public void test() { int i = 100; class InnerClass { public int x; public void run() {} } }}
局部内部类不可以使用任何修饰符(public、private、static……),因为这些修饰符是用于修饰类的成员的。
由于局部内部类是声明在方法中的,而方法中的代码区分先后顺序,所以,使用局部内部类,必须在声明局部内部类之后,且,该局部内部类只能作用于所在的方法。
局部内部类不可以直接访问局部变量,如果一定要访问该量,需要将变量修饰为final,或者提升为全局变量。
4) 匿名内部类
:直接new出已知的类的子类对象,或者接口的抽象类对象,例如:
public class MainActivity extends Activity { private View.OnClickListener listener = new View.OnClickListener { public void onClick(View view) { } }; protected void onCreate(Bundle bundle) { new View.OnClickListener() { public void onClick(View view) { } }; }}
由于匿名内部类是直接创建出对象的,如果是直接在方法中创建对象,则该匿名内部类符合局部内部类的特征,例如不可以直接访问局部变量等等;
内部类可以访问外部类的所有成员,无论这些成员是使用什么样的权限修饰的。
0 0
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- uboot下用SecureCRT脚本实现一键烧写linux
- [LeetCode]60. Permutation Sequence
- 【BZOJ1013】球形空间产生器sphere 高斯消元
- hdu 3010
- 3.1.3 Memcached的安装(2)
- 内部类
- UVA 1615 Highway 区间选点 经典贪心 (SEERC 2005)
- uboot必须解决哪些问题
- An Introduction to Machine Learning with Python
- Linux下配置用msmtp和mutt发邮件
- iOS开发总结之仿qq侧滑功能
- js代码实现查找关键字高亮显示
- GUI之绘制2D贴图
- poj 1741 树的分治。。。。