码迷,mamicode.com
首页 > 移动开发 > 详细

Android常见的三种内部类

时间:2017-04-10 23:38:32      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:tle   code   成员   http   pre   print   xtend   开放   []   

在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. 类名没有意义,也就是不需要使用到。

Android常见的三种内部类

标签:tle   code   成员   http   pre   print   xtend   开放   []   

原文地址:http://www.cnblogs.com/ldq2016/p/6691260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!