在java里类中再定义类,这种在其他类内部类叫做内部类,在Android开发里最常见有三种内部类分别是(成员内部类、方法内部类、匿名内部类)

一、成员内部类

1 public class Test {
2 //不对外开放的
3 class memberInnerClass{
4 public void memberInner(){
5 System.out.println("成员内部类");
6 }
7 }
8 }

编译一下,我们看到目录中出现了两个class文件在我们的工作目录里,可以看到多出一个Test$memberInClass.class的文件,这是就是内部类编译后的class文件

成员内部类的特点:
  1. 内部类就像一个实例成员一样存在于外部类中。
  2. 内部类可以访问外部类的所有成员就想访问自己的成员一样没有限制。
  3. 内部类中的this指的是内部类的实例对象本身,如果要用外部类的实例对象就可以用类名.this的方式获得。
  4. 内部类对象中不能有静态成员,原因很简单,内部类的实例对象是外部类实例对象的一个成员。

二、方法内部类

1 public class A {
2
3 public void A(){
4 System.out.println("方法内部类");
5 }
6
7 }
 1 public class Test {
2
3 public void methodInner(){
4 //短暂性的
5 class B extends A{
6
7 }
8 new B().A();
9 }
10 }

方法内部类特点:

  1. 方法中的内部类没有访问修饰符, 即方法内部类对包围它的方法之外的任何东西都不可见。
  2. 方法内部类只能够访问该方法中的局部变量,所以也叫局部内部类。而且这些局部变量一定要是final修饰的常量。

三、匿名内部类(在Android里最常见的一种)

当我们把内部类的定义和声明写到一起时,就不用给这个类起个类名而是直接使用了,这种形式的内部类根本就没有类名,因此我们叫它匿名内部类

1 public abstract class A implements B{
2
3 public void A(){
4 System.out.println("A");
5 }
6
7 }
1 public interface B{
2
3 public void B();
4
5 }
 1 public class Test {
2
3 public static void main(String[] args) {
4 //new出接口或者实现类
5 A a= new A (){
6 //实现接口里未实现的方法
7 public void B() {
8 System.out.println("匿名内部类");
9 }
10 };
11 a.A();
12 a.B();
13 }
匿名内部类的特点:
  1. 一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。
  2. 只是为了获得一个对象实例,不需要知道其实际类型。
  3. 类名没有意义,也就是不需要使用到。

最新文章

  1. 百度地图API的IP定位城市和浏览器定位(转)
  2. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳
  3. 三款Javascript SPAs框架资料整理和总结
  4. django models auto_now和auto_now_add的区别
  5. vim 高级使用技巧第二篇
  6. sonar-maven-plugin问题
  7. Angular1.0
  8. BZOJ 3674 可持久化并查集加强版 可持久化并查集
  9. 解决水晶报表在IIS7下的权限问题。
  10. VC命令行编译参数介绍
  11. python中的一些小知识
  12. Java Web 高性能开发,第 2 部分: 前端的高性能
  13. golang与vscode的安装与配置
  14. ToolBar样式颜色,图标设置
  15. JMX-Java Management Extensions
  16. Nginx.代理MySQL
  17. 卷积神经网络入门:LeNet5(手写体数字识别)详解
  18. git patch 使用
  19. 元素加了position:absolute则该元素的text-align:center居中失效的解决办法
  20. POSIX 线程详解

热门文章

  1. Page-Object思想
  2. Java监听器Listener使用说明
  3. clr(Windows 运行时和公共语言运行时)
  4. luogu4016 负载平衡问题
  5. Java项目引入eclipse注意事项
  6. day05_03 字符串格式化
  7. PostgreSQL 全文索引
  8. PHP 开启或关闭错误提示
  9. SVM 与 LR的异同
  10. 九度oj 题目1171:C翻转