黑马程序员技术交流社区

标题: Java内部类 [打印本页]

作者: 郑泽霖    时间: 2014-11-16 13:44
标题: Java内部类
内部类
class A
{
int num=4;
void method()
{
System.out.println(“num=”+num);
}
}

class B
{
void show()
{
A out=new A();
//类B要访问类A中的数据
out.num;
out.method();
}
}

不如把类B写到A类内部
class A
//外部类
{
private int num=4;
class B
//内部类

{
void show()
{
System.out.println(“num=”+num);
//访问A类的数据
}
}
void method()
{
B h=new B();
//用内部类定义对象
//完整的写为:A.B h=new A.B();
h.show();
}
}

class Demo
{
public static void main(String[] args)
{
A out=new A();
out.method();
//调用A类的Method方法创建B类对象,并调用B类的方法show
}
}
内部类可以直接访问外部类的数据包含私有的,而外部类要访问内部类的数据必须创建内部类的对象


作者: 郑泽霖    时间: 2014-11-16 13:50
内部类的继承和实现
内部类的类名含有点
普通类不能被static修饰,但是内部类和类成员一样,可以被static修饰
接口内部也可以有另一个接口,内部接口
1内部类是可以继承或者实现外部其他的类或接口的
class A
{
int num=3;
class B extends C
{
void show()
{...}
}
...
}
2内部类继承的应用:
abstract class C//被内部类继承的类
{
abstract void show();
}
/**********************************************/
class A//外部类
{
int num=3;
private class B extends C//内部类
{
void show(){...};
}
public C getObject()
{
return new B();
}
//内部类是私有的,不能定义变量,所以返回类型应该是父类C的
}
/************************************************/
class Demo
{
public static void main(String[] args)
{
A a=new A();
//A.B in=A.getObject();//内部类是私有的,不能定义变量,错误
C c=a.getObject();//多态,C是内部类B的父类
c.show();
//父类中show是纯虚函数(抽象方法),所以会调用子类的show
}
}

作者: 郑泽霖    时间: 2014-11-16 13:53
内部类访问外部类的同名数据
class A//外部类
{
int num=3;
class B//内部类
{
int num=4;
void show()
{
System.out.println(“num=”+this.num);
//访问的是内部类B的num
System.out.println(“num=”+A.this.num);
//访问的是外部类A的num,利用外部类A的this对象调用num变量
}
}
void method()
{
new B().show();
}
}
内部类为什么能直接访问外部类中的成员呢?因为内部类其实持有了外部类的引用:外部类.this
静态内部类中没有 外部类.this 引用,因为静态成员中不能含有this





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2