您的位置:首页 > 其它

我的安卓学习之路--内部类

2012-10-25 19:34 141 查看
本人新手,写下自己的学习心得,给以后的我看 ,如果有什么错误,请大神指出来

定义:内部类是指在一个外部类的内部再定义一个类。

内部类分为:

1.成员内部类
2.局部内部类(方法内部类)
3.静态内部类(静态嵌套类)
4.匿名内部类

在这之前先说明:
优点:在于方便的访问外部类中的私有成员
缺点:程序结构混乱

使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

开始讲解
(讲解一下成员变量和局部变量来区分一下成员和局部的不同之处
package com.liyangjr.inner;
public class InnerMethod {
String name1 = "我是成员变量的值";// 成员属性
public void Test() { // 成员方法
String name1 = "我是局部变量的值";
}
}

理解一下什么叫成员(全局),什么叫局部)

了解一下

1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类

下面是实例
public class Outer extends Object {
String outerName;//成员属性
//成员内部类    ---------->成员内部类的编译成Outer$Inner.class
public  class Inner extends Object{

}
//静态内部类
public static class Inner1{

}
public  void outerMethod()
{
//局部内部类//内部类 方法内部类
class InnerMethod{
}
}
//定义接口
public interface PCI {
public void start();
}
//匿名的内部类
PCI p=new PCI() {
@Override
public void start() {
}
};
}
---------->成员内部类的编译成Outer$Inner.class
---------->局部内部类被编译成Outer$1Inner.class(注意1)


1.成员内部类

还是用代码来显示
package com.liyangjr.memberclass;

public class Outer {
String name;
int age;
public void outerMethod() {
System.out.println("outerMethod进入成功");// 外部类访问内部类的属性,需在先产生对象.属性方式来访问
Inner i = new Inner();
i.name = "成员内部类中的属性";
System.out.println(i.name);

}
// 内部类 //成员内部类
public class Inner {
String name;

public void innerMehtod() {
name = "inner";// 成员内部类中的属性
this.name = "inner";// 成员内部类中的属性
Outer.this.name = "outer";// 外部类的属性
age = 12;
System.out.println(this.name+","+age);
}
}
}


测试类
package com.liyangjr.memberclass;

import com.liyangjr.memberclass.Outer.Inner;

public class Test {
public static void main(String[] args) {
//		Outer o = new Outer();
//		Outer.Inner inner = o.new Inner();
//		inner.innerMehtod();
Outer.Inner inn  =new Outer().new Inner();//简化
inn.innerMehtod();
}
}


结果  inner,12


2.局部内部类

方法内的局部内部类,它就是为这个方法来提供功能的。

package com.liyangjr.localclass;

public class Outer {
String outerName;

public void outerMethod() {
// 方法内的局部内部类,它就是为这个方法来提供功能的。
// 所以,它的调用,就是在方法内完成调用
// 方法中变量,即局部变量
final int methodVar = 123;
// 内部类 方法内部类,局部内部类
class InnerMethod {
String outerName;

public void innerMethod() {
// methodVar=1;
System.out.println(methodVar);
outerName = "123";
Outer.this.outerName = "123";
System.out.println("innerMethod");
}
}
// 在这里完成调用的
InnerMethod im = new InnerMethod();
im.innerMethod();

}
}


测试
package com.liyangjr.localclass;

public class Test {
public static void main(String[] args) {
Outer o =new Outer();
o.outerMethod();
}

}


3.静态内部类(嵌套类 )

static的内部类就叫做嵌套类

另外,嵌套类还有特殊之处,就是嵌套类中可以有static方法,static字段与嵌套类,而普通内部类中不能有这些。

package com.liyangjr.staticclass;

public class Outer{
String sex;
static  String  address;
//成员方法
public void outerMethod()
{
Inner.name="";
Inner i=new Inner();
i.age=2;
}
//静态内部类
public static class Inner{
static String name;
int age;

public void innerMethod() {
// Outer.this.sex="女"; //错误
Outer.address = "静态内部类的innerMethod"; // 只能操作外部类的static 变量
System.out.println(Outer.address);
}
}
}


测试

package com.liyangjr.staticclass;

public class Test {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner();
inner.innerMethod();

}

}


4.匿名内部类

还没有搞清楚 ,明天继续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: