黑马程序员-java中内部类知识点总结
来源:互联网 发布:小米盒子刷linux 编辑:程序博客网 时间:2024/03/29 12:44
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
内部类:将一个类定义在另一个类里面。内部类可以直接访问外部类中的成员,包括私有成员。
格式 Outer.Inner in=new Outer().new Inner();
成员内部类:就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。外部类访问内部类成员必须先建立内部类对象。外面的其他类要访问内部类时,需要实例化,格式 Outer.Inner in=new Outer().new Inner();
这里需要内部类不是private。之所以可以可以直接访问外部类中的成员,是因为内部类中持有并隐藏了一个外部类的引用,格式 外部类名.this.成员 。如
class Outer{int x=1;class Inner{int x=2;public void a(){int x=3;System.out.println(x);System.out.println(this.x);System.out.println(Outer.this.x);}}}
输出结果为321
注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。
当内部类被static修饰后,它只能访问外部类的静态成员。
注意:当内部类中有静态成员,该内部类必须是static的。当外部类中的静态方法访问内部类时,内部类也必须是static的。
局部内部类:是指内部类定义在方法和作用域内。
内部类定义在局部时,1不可以被成员修饰符修饰。
2可以直接访问外部类中的成员,因为还持有外部类的引用。但是不可以访问它所在局部中的变量。只能访问被final修饰的局部变量。
public class Parcel4 { public Destination destination(String s) { class PDestination implements Destination { private String label; private PDestination(String whereTo) { label = whereTo; } public String readLabel() { return label; } } return new PDestination(s); } public static void main(String[] args) { Parcel4 p = new Parcel4(); Destination d = p.destination("Tasmania"); } }
public class Parcel5 { private void internalTracking(boolean b) { if (b) { class TrackingSlip { private String id; TrackingSlip(String s) { id = s; } String getSlip() { return id; } } TrackingSlip ts = new TrackingSlip("slip"); String s = ts.getSlip(); } } public void track() { internalTracking(true); } public static void main(String[] args) { Parcel5 p = new Parcel5(); p.track(); } }局部内部类也像别的类一样进行编译,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。
匿名内部类:
1匿名内部类其实就是内部类的简写格式。
2定义匿名内部类的前提:内部类必须是继承一个外面的类或者接口,甚至可以继承自己所在的类。
如:
class Inter2{void method2() {}static Inter2 in2=new Inter2(){//定义Inter2的子类void method3(){}void method2(){}};} abstract class Inter3{abstract void method();Inter3 in3=new Inter3(){//定义Inter3的子类void method(){}};}
3匿名内部类的格式: new 父类或者接口(){定义子类的内容}.方法();实在没有父类了,就new一个Object作为此类的父类。
4其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。
5匿名内部类中定义的方法最好不要超过3个。
在实际开发时候,会大量用到匿名内部类,因为它简单方便。
- 黑马程序员-java中内部类知识点总结
- 黑马程序员 知识点总结-Java内部类
- 黑马程序员+对Java中匿名内部类总结
- 黑马程序员:Java基础总结----内部类
- 《黑马程序员》java内部类个人总结
- 黑马程序员-----java内部类总结*
- 黑马程序员-java内部类总结
- 黑马程序员-----[20150416][Java内部类总结]
- 【黑马程序员】java中-------------内部类
- 黑马程序员——Java内部类知识点整理
- 黑马程序员 内部类总结
- 黑马程序员---内部类总结
- Java内部类知识点总结
- 黑马程序员--java内部类!
- 黑马程序员--java内部类
- 黑马程序员--Java内部类
- 黑马程序员 Java 内部类
- 黑马程序员---java 内部类
- 读朱兆祺攻破C语言之七---结构体、联合体
- 扁鹊的医术
- IOS php 服务器 客户端 准备工作
- libcurl-2
- 为linux添加硬盘
- 黑马程序员-java中内部类知识点总结
- Unable to open file 'RM_CLASS.OBJ'
- EXCEL数据导入SQL数据库
- 测试IRP 和Dispatchroutin
- USB 协议分析仪器
- 以半圆轨迹抛射物体
- ANT简明教程[转载]
- spring多事务管理
- Sicily2015