二只内部类(内隐类)
1只;内隐类的基本用法
1),如果要在外围类的非静态函数之外产生一个内部类对象,得以OuterClassName.InnerClassName的形式指定该对象的型别,而在非静态函数内则不用。
公共类ExplicitStatic {
,类内容{
,私人int i=11;
,公共int值(){返回我;}
,}
,类目的地{
,私人字符串标签;
,目的地(字符串例2){
,
标签=为什么;,}
,字符串readLabel(){返回标签;}
,}
,公共目的地(String s) {
,//在外部类的非静态函数中可直接产生内部类对象
,返回新目的地(s);// <我> (1 <我>
,}
,公共内容跟(){
,返回新内容();// <我> (1 <我>
,}
,公共空船(字符串dest) {
//在外部类的非静态函数中可直接通过InnerClassName
//来指定对象型别
,内容();c=控制
,目的地d=(桌子);
,System.out.println (d.readLabel ());
,}
,公共静态void main (String [] args) {
,新ExplicitStatic ExplicitStatic p=();
,p.ship(坦桑尼亚);
,ExplicitStatic q=new ExplicitStatic ();
,//在外围类的非非静态函数内产生内部类对象
,ExplicitStatic。内容c=q.cont ();
,ExplicitStatic。目的地d=q.to(婆罗洲);
,//不能在静态函数直接生成内部类对象
//新内容();
,}
}
2),对于非静态内部类,在外围类的非静态函数可以通过新产生一个内部类对象,如上面的(1)处。但要在非非静态函数产生一个内部类对象,则一定要关联到其封闭类的某个对象。
3),内部类的向上转型
当把一个内部类对象向上转型成为接口时,我们得到的只是一个参考。
目的地{界面
,
字符串readLabel ();} {
接口内容
,
int值();} 类Parcel3 {
,私人类PContents实现内容{
,私人int i=11;
,公共int值(){返回我;}
,}
,保护类PDestination实现目的地{
,私人字符串标签;
,PDestination(字符串例2){
,
标签=为什么;,}
,公共字符串readLabel(){返回标签;}
,}
,公共目的地(String s) {
,返回新PDestination(年代);
,}
,公共内容跟(){
,
返回新PContents ();,}
}
公共类ExplicitStatic {,
,公共静态void main (String [] args) {
,新Parcel3 Parcel3 p=();
,//把内部类对象向上转型
,内容c=p.cont ();
,目的地d=对(婆罗洲),,
,}
}
虽然我们不能在ExplicitStatic类无法调用Pcontents类,但我们把一个Pcontents类对象向上转型为内容,就可对之进行调用。
4),内部类的作用域为定义该内部类的范围内。但内部类可在它的作用域之外被继承(见4)。
{接口内容
,
int值();} 类Parcel3 {
,//PContents1类的作用域为Parcel3类内
,私人类PContents1实现内容{
,私人int i=11;
,公共int值(){返回我;}
,}
,公共内容cont1 () {
,
返回新PContents1 ();,}
,公共内容cont2 () {
,//PContents2类的作用域为函数cont2内
,类PContents2实现内容{
,私人int i=11;
,公共int值(){返回我;}
,}
,
返回新PContents2 ();,}
,//不能在函数cont2外使用PContents2类
,/*
,公共内容cont22 () {
,,返回新PContents2 ();
,}
,*/
,公共内容cont3(布尔b) {
,如果(b) {
,//PContents3类的作用域为当前如果内
,类PContents3实现内容{
,私人int i=11;
,公共int值(){返回我;}
,}
,
返回新PContents3 ();,}
,//不能在如果外使用PContents3类
,//返回新PContents3 ();
,返回null;
,}