最近看了一片文章,其中讲到了内隐类,不是很明白,希望大家给我讲解一下
解决方案 »
- 请问强人,java如何强制删除文件或目录?
- 谁有Java视野(ITEYE)的号啊 帮我下个东西!
- java程序中项word添加数据时,并设置某字符为上标或下标!(jacob)
- Java生产者消费者问题
- Hibernate 与 JTA MYSQL INNODB JOTM
- 就剩下10可用分了,LinkedList 问题 如果嫌分少 我再申请个ID 把分都给你
- 有谁用过SUN的FTP组件,他的下载地址,非常急用。非常感谢
- [在线等]求助,获取文本文件行数时忽略“回车符”的问题
- 如何利用java实现屏幕拷贝的问题
- 关于java代理的小问题,下面代码和书上完全一样,编译器报错java.lang.ArrayIndexOutOfBoundsException,求大神帮忙!
- 关于main的疑问
- 适合用于算法的练习的java开发工具
class Outer
{
private int index = 100;
private int test1 = 999;
static int stFlag =88;
//在非静态的内部类中不能定义静态的成员变量和方法!只有在顶层类中才能定义static变量和方法!
class Inner
{
private int test2 = 99;
int index = 10;
void print()
{
int test3 = 9;
int index = 1;
System.out.println("index: " + index);
System.out.println("this.index: " + this.index);
System.out.println("Outer.this.index: " + Outer.this.index);
System.out.println("test1: " + test1);
System.out.println("test2: " + test2);
System.out.println("test3: " + test3);
}
}
Inner print()
{
return new Inner();
}
/************************************************************/
static class stInner
{
static int saticF = 0;
int flag = 8;
void print()
{
System.out.println("在静态类stInner中:");
System.out.println("saticF: " + saticF);
System.out.println("flag: " + flag);
System.out.println("stFlag: " + stFlag);
}
static void stPrint()
{
System.out.println("在静态类stInner的静态方法中:");
System.out.println("saticF: " + saticF);
System.out.println("stFlag: " + stFlag);
}
}
/************************************************************/
//在函数中定义的类如果要引用函数里的变量则变量必须是final形式
void func(final int a)
{
final int b = 0;
if(true)
{
class Middle
{
int index = 101;
class InInner
{
int index = 102;
void print()
{
int index = 103;
System.out.println("测试在InInner类中:");
System.out.println("index: " + index);
System.out.println("this.index: " + this.index);
System.out.println("Middle.this.index: " + Middle.this.index);
System.out.println("Outer.this.index: " + Outer.this.index);
System.out.println("a: " + a);
System.out.println("b: " + b);
}
}
}
Middle d = new Middle();
Middle.InInner in = d.new InInner();
in.print();
}
}
//注意区分类外和类内的调用内部类的不同方法。比较Test中的main方法!
public static void main(String[] args)
{
Outer outer = new Outer();
//如果直接Inner inner = new Inner();是不行的,因为main方法是一个静态的方法。
//Inner类可以看成是Outer类的一个成员变量,静态方法是不能直接访问该类的非静态成员。
//所以必须先调用Outer outer = new Outer();生成一个Outer类的变量,然后通过该outer
//变量再去生产Inner类的实例。
Inner inner = outer.new Inner();
inner.print();
outer.func(5);
stInner.stPrint();
stInner stIn = new stInner();
stIn.print();
}
}/************************************************************/
/************************************************************/
/************************************************************/
//注意Test1类和Test2类的区别
class Test1 extends Outer.stInner
{
public static void main(String[] args)
{
Outer outer = new Outer();
Outer.Inner i = outer.new Inner();
Outer.Inner inner = outer.print();
inner.print();
outer.func(5);
Outer.stInner.stPrint();
Outer.stInner stIn = new Outer.stInner();
stIn.print();
}
}
/************************************************************/
class Test2 extends Outer.Inner
{
//要建立如下的构造函数,来生成Outer类的实例,才能生产内部类Inner
Test2(Outer outer)
{
outer.super();
}
public static void main(String[] args)
{
Outer outer = new Outer();
Outer.Inner i = outer.new Inner();
Outer.Inner inner = outer.print();
inner.print();
outer.func(5);
Outer.stInner.stPrint();
Outer.stInner stIn = new Outer.stInner();
stIn.print();
}
}
<<Thinking in Java>>里面讲到内隐类时专门有这方面的介绍。