我的安卓学习之路--内部类
2012-10-25 19:34
141 查看
本人新手,写下自己的学习心得,给以后的我看 ,如果有什么错误,请大神指出来
定义:内部类是指在一个外部类的内部再定义一个类。
内部类分为:
1.成员内部类
2.局部内部类(方法内部类)
3.静态内部类(静态嵌套类)
4.匿名内部类
在这之前先说明:
优点:在于方便的访问外部类中的私有成员
缺点:程序结构混乱
使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
开始讲解
(讲解一下成员变量和局部变量来区分一下成员和局部的不同之处
理解一下什么叫成员(全局),什么叫局部)
了解一下
1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类
下面是实例
1.成员内部类
还是用代码来显示
测试类
2.局部内部类
方法内的局部内部类,它就是为这个方法来提供功能的。
测试
3.静态内部类(嵌套类 )
static的内部类就叫做嵌套类
另外,嵌套类还有特殊之处,就是嵌套类中可以有static方法,static字段与嵌套类,而普通内部类中不能有这些。
测试
4.匿名内部类
还没有搞清楚 ,明天继续
定义:内部类是指在一个外部类的内部再定义一个类。
内部类分为:
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.匿名内部类
还没有搞清楚 ,明天继续
相关文章推荐
- 我的安卓学习之路--Java多线程--线程简介
- 我的安卓学习之路--java的家长里短
- 安卓的学习之路Fragment的创建的几种方式
- 系统学习安卓之路--重在坚持
- 我的学习之路_第三章_匿名内部类
- 我的安卓学习之路--split,StringTokenizer
- [Xutils]安卓框架的学习之路
- 安卓学习之路之广播
- 安卓学习之路之服务的简单的使用
- 安卓学习第十三天:大文件的IO,字符流,处理流,内部类,匿名内部类,线程初步
- 安卓之路-学习笔记2
- 安卓学习之路之内部存储之InternalStorage
- 安卓学习之路_20140417
- 安卓学习之路之如何显示一个listview列表视图
- 安卓学习之路之Loader的简单用法
- 安卓学习之路之Fragment和Activity之间的传值
- 我的安卓学习之路--java的基本语法
- 我的安卓学习之路--重写 覆盖 重载 之间的区别
- 安卓学习之路13之签名打包和SDK开发文档