JAVA学习资料之成员内部类
2010-08-01 01:13
337 查看
在类的成员中,有变量(variable,有的称之为属性,property)和方法(method,有的称之为函数,function)。现在,又添了一个类(class)。这是个很有意思的成员。
静态内部类又称为“嵌套类(nested class)”。因为只属于外部类,静态内部类不依赖于外部类所生成的对象,所以还不算奇怪。在外部类之内的方法中创建内部类对象就和创建一般对象一样没有区别。而在外部类之外创建内部类对象时,要明确内部类的位置:外部类类名.内部类类名
引用=new 外部类类名.内部类构造器; ,这使外部类看起来很像包。
而非静态内部类就很奇怪了。因为在有权限的情况下,类成员变量和方法在类生成的对象中是可以访问的,于是我们可以认为这些成员随类被具体化了。而类是抽象的,在外部类生成的具体对象中肯定不能访问到成员内部类,并且在外部类具体化的同时内部类是不会被具体化的。然后你可能会想到直接通过类名来利用内部类,就和静态内部类一样。那么,就请注意这个非静态内部类和其他非静态成员一样是依赖于对象的,而不是类(可别犯概念错误!)。再说,如果这样,静态和非静态还有什么差别啊?可是类的非静态成员内部类到底哪里去了(要知道,它也可以用public来修饰啊)?类和对象看似水火不容,而Java偏偏就是把它们结合在了一起。既然结合了,就必然有办法在外部类外或通过外部类对象来利用非静态成员内部类(在外部类中创建它的对象,与普通类没啥区别,不谈了)。创建它的对象的方法以前从来没有见过:
外部类类名.内部类类名 引用=new 外部类构造器.new
内部类构造器;
或
外部类类名.内部类类名 引用=外部类对象引用.new 内部类构造器;
我们不能直接在外部类对象中访问到非静态内部类的构造器,但能通过new运算符访问到(这种用法很怪)。还要注意的是,在静态方法中不能创建非静态内部类的对象。
在编译后,内部类会有自己专有的class文件,其命名方式是:外部类名称$内部类名称.class。
另外,我还做了一些试验:
1.在成员内部类中可以访问到其外部类的其他数据成员
2.内部类可继承或实现接口
3.内部类还可以拥有内部类
4.存在内部接口,只能出现在最外部类中或静态内部类中
5.非静态内部类不能拥有静态成员,静态内部类中可以拥有静态成员(内部接口也算静态成员)
附:试验代码
class
MyAttempt1
{
private
int
i=12;
interface
gg{public
void
p();}
static
int
hh(){return
0;}
public
class
aa
implements
gg
{
public
void
p()
{
ee
ff=new
ee();
ff.p();
}
public
class
ee
implements
gg
{
public
void
p()
{
System.out.println(i);
}
}
//interface gg{public void p();}
出错,提示说“内部类成员不能有静态声明”
//static int hh(){return 0;}
出错,提示说“内部类成员不能有静态声明”
}
public
static
void
main(String[]
args)
{
MyAttempt1
dd=new
MyAttempt1();
dd.bb();
}
private
void
bb()
{
aa
cc=new
aa();
cc.p();
}
}
class
MyAttempt2
{
private
int
i=12;
//public static class aa implements gg
出错,提示说“找不到符号”
public
static
class
aa
{
public
void
p()
{
ee
ff=new
ee();
ff.p();
}
public
class
ee
implements
gg
{
public
void
p()
{
//System.out.println(i);
出错,提示说“无法从静态上下文中引用非静态变量i”
System.out.println(hh());
}
}
interface
gg{public
void
p();}
static
int
hh(){return
0;}
}
public
static
void
main(String[]
args)
{
MyAttempt2
dd=new
MyAttempt2();
dd.bb();
}
private
void
bb()
{
aa
cc=new
aa();
cc.p();
}
}
静态内部类又称为“嵌套类(nested class)”。因为只属于外部类,静态内部类不依赖于外部类所生成的对象,所以还不算奇怪。在外部类之内的方法中创建内部类对象就和创建一般对象一样没有区别。而在外部类之外创建内部类对象时,要明确内部类的位置:外部类类名.内部类类名
引用=new 外部类类名.内部类构造器; ,这使外部类看起来很像包。
而非静态内部类就很奇怪了。因为在有权限的情况下,类成员变量和方法在类生成的对象中是可以访问的,于是我们可以认为这些成员随类被具体化了。而类是抽象的,在外部类生成的具体对象中肯定不能访问到成员内部类,并且在外部类具体化的同时内部类是不会被具体化的。然后你可能会想到直接通过类名来利用内部类,就和静态内部类一样。那么,就请注意这个非静态内部类和其他非静态成员一样是依赖于对象的,而不是类(可别犯概念错误!)。再说,如果这样,静态和非静态还有什么差别啊?可是类的非静态成员内部类到底哪里去了(要知道,它也可以用public来修饰啊)?类和对象看似水火不容,而Java偏偏就是把它们结合在了一起。既然结合了,就必然有办法在外部类外或通过外部类对象来利用非静态成员内部类(在外部类中创建它的对象,与普通类没啥区别,不谈了)。创建它的对象的方法以前从来没有见过:
外部类类名.内部类类名 引用=new 外部类构造器.new
内部类构造器;
或
外部类类名.内部类类名 引用=外部类对象引用.new 内部类构造器;
我们不能直接在外部类对象中访问到非静态内部类的构造器,但能通过new运算符访问到(这种用法很怪)。还要注意的是,在静态方法中不能创建非静态内部类的对象。
在编译后,内部类会有自己专有的class文件,其命名方式是:外部类名称$内部类名称.class。
另外,我还做了一些试验:
1.在成员内部类中可以访问到其外部类的其他数据成员
2.内部类可继承或实现接口
3.内部类还可以拥有内部类
4.存在内部接口,只能出现在最外部类中或静态内部类中
5.非静态内部类不能拥有静态成员,静态内部类中可以拥有静态成员(内部接口也算静态成员)
附:试验代码
class
MyAttempt1
{
private
int
i=12;
interface
gg{public
void
p();}
static
int
hh(){return
0;}
public
class
aa
implements
gg
{
public
void
p()
{
ee
ff=new
ee();
ff.p();
}
public
class
ee
implements
gg
{
public
void
p()
{
System.out.println(i);
}
}
//interface gg{public void p();}
出错,提示说“内部类成员不能有静态声明”
//static int hh(){return 0;}
出错,提示说“内部类成员不能有静态声明”
}
public
static
void
main(String[]
args)
{
MyAttempt1
dd=new
MyAttempt1();
dd.bb();
}
private
void
bb()
{
aa
cc=new
aa();
cc.p();
}
}
class
MyAttempt2
{
private
int
i=12;
//public static class aa implements gg
出错,提示说“找不到符号”
public
static
class
aa
{
public
void
p()
{
ee
ff=new
ee();
ff.p();
}
public
class
ee
implements
gg
{
public
void
p()
{
//System.out.println(i);
出错,提示说“无法从静态上下文中引用非静态变量i”
System.out.println(hh());
}
}
interface
gg{public
void
p();}
static
int
hh(){return
0;}
}
public
static
void
main(String[]
args)
{
MyAttempt2
dd=new
MyAttempt2();
dd.bb();
}
private
void
bb()
{
aa
cc=new
aa();
cc.p();
}
}
相关文章推荐
- 【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式
- JAVA学习资料之局部内部类
- java成员内部类学习笔记
- java基础学习——成员内部类
- java学习中成员内部类小探索
- Java学习笔记_成员内部类,静态内部类,方法内部类
- 【学习笔记14】java面向对象-成员内部类、局部内部类
- Android(java)学习笔记111:成员位置的内部类的介绍
- Java 梳理类,对象,继承,学习成员内部类,匿名内部类
- Java容器学习笔记(由java编程思想和网上资料整理而成)
- Java学习资料汇总(吐血分享)----持续更新中
- Java反射06 : 成员变量Field学习示例
- Java之收集很好的Java学习资料地址+博客
- Java学习资料整合
- Java菜鸟学习笔记--面向对象篇(八):成员变量和局部变量
- Java -- 内部类, 成员内部类,局部内部类,匿名内部类,闭包和回调, 枚举类
- Java 8 学习资料汇总【转载】
- 开一篇文章 记录我的java学习路上看过的书和资料 以及杂七杂八的面试经历
- java 遍历对象的内部成员
- Java 学习资料整理