黑马程序员-java中内部类知识点总结
2013-12-10 16:35
363 查看
----------------------
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");
}
}
匿名内部类:
1匿名内部类其实就是内部类的简写格式。
2定义匿名内部类的前提:内部类必须是继承一个外面的类或者接口,甚至可以继承自己所在的类。
如:
3匿名内部类的格式: new 父类或者接口(){定义子类的内容}.方法();实在没有父类了,就new一个Object作
为此类的父类。
4其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。
5匿名内部类中定义的方法最好不要超过3个。
在实际开发时候,会大量用到匿名内部类,因为它简单方便。
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
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个。
在实际开发时候,会大量用到匿名内部类,因为它简单方便。
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员-java中内部类知识点总结
- 黑马程序员 知识点总结-Java注解
- 黑马程序员 知识点总结-Java中几种常见的排序算法
- 黑马程序员 知识点总结-Java IO(四)转换流、打印流
- 黑马程序员 知识点总结-Java GUI
- 黑马程序员---Java高新技术反射知识点总结
- 黑马程序员 知识点总结-Java JDK 1.5 新特性和枚举
- 黑马程序员-Java中IO流知识点总结
- 黑马程序员 知识点总结-Java继承
- 黑马程序员 知识点总结-Java网络编程
- 黑马程序员-java面向对象知识点总结
- 黑马程序员__JAVA高新技术--枚举及内省JavaBean、可变参数等知识点总结
- 黑马程序员 知识点总结-Java泛型
- 黑马程序员 知识点总结-Java IO(六)File
- Java基础之内部类、匿名类和异常处理知识点总结
- 黑马程序员——java中的匿名内部类总结
- 黑马程序员 知识点总结-Java帮助文档的生成
- 黑马程序员 知识点总结-Java多态
- 黑马程序员 知识点总结-Java IO(一)
- 黑马程序员:Java基础总结----(小知识点)foreach循环