A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑泽霖 中级黑马   /  2014-11-16 13:44  /  630 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类
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
}
}
内部类可以直接访问外部类的数据包含私有的,而外部类要访问内部类的数据必须创建内部类的对象

2 个回复

倒序浏览
内部类的继承和实现
内部类的类名含有点
普通类不能被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
}
}
回复 使用道具 举报
内部类访问外部类的同名数据
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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马