Java的内部类详解
2016-07-17 11:55
357 查看
1.什么是内部类?
内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
2.内部类的作用?
1). 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2). 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3). 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
3.内部类的有几种?
1)成员内部类
2)静态内部类
3)方法内部类
4)匿名内部类
4.各种内部类的实例
内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
2.内部类的作用?
1). 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2). 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3). 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
3.内部类的有几种?
1)成员内部类
2)静态内部类
3)方法内部类
4)匿名内部类
4.各种内部类的实例
//1)成员内部类 public class Outer{ //外部类 private String name="Java外部类";//外部类私有属性 int age=1;//外部类成员属性 public class Inner {//成员内部类 String name="Java类部类";//内部类成员属性 public void test(){ System.out.println("外部类的name:"+Outer.this.name); System.out.println("内部类的name:"+name); System.out.println("外部类的age"+age); } } public static void main(String[] args){ //创建外部类的对象 Outer outer = new Outer(); //创建内部类的对象 Inner inn =outer.new Inner() ; //调用内部类对象的test方法 inn.test(); } } /**注意: a. Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等 b. Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a c. 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( ); d.外部类是不能直接使用内部类的成员和方法 e.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字 */ //2)静态内部类 public class Outer{ //外部类 private String name="Java外部类";//外部类私有属性 int age=1;//外部类成员属性 public static class Inner {//静态内部类 String name="Java类部类";//内部类成员属性 public void test(){ System.out.println("外部类的name:"+Outer.name); System.out.println("内部类的name:"+name); System.out.println("外部类的age"+age); } } public static void main(String[] args){ //直接创建内部类的对象 Inner inn =new Inner() ; //调用内部类对象的test方法 inn.test(); } } /**注意: 静态内部类是 static 修饰的内部类,这种内部类的特点是: a. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 b. 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员 c. 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类(); */ //3)方法内部类 public class Outer{ //外部类 private String name="Java外部类";//外部类私有属性 int age=1;//外部类成员属性 public void test(){ public class Ineer{//方法内部类 int age=10; public int Getage(){ return age; } //创建内部类对象 Inner inn=new Inner(); inn.Getage(); } } public static void main(String[] args){ //创建外部类的对象 Outer outer=new Outer(); //调用外部类对象的test方法 outer.test(); } } /**注意: a.方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。 b.由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。 */ //4)匿名内部类 public class Father{ String name="father";//Father类的成员属性 int age=45; public String GetName(){ return name; } public int GetAge(){ return age; } } public class Test{ public void test(Father father){ System.out.println("父亲名字为"+father.GetName()+"年龄"+father.GetAge()); } public static void main(String[] args){ Test test=new Test(); test.test(new Father(){//匿名内部类 public String GetName(){ return "father"; } public int GetAge(){ return 45; } } } /**注意: a.使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。 b.匿名内部类中是不能定义构造函数的。 c.匿名内部类中不能存在任何的静态成员变量和静态方法。 d.匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。 e.匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。 */
</pre><p></p><pre>
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树