黑马训练营——内部类

 

内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类。

内部类是一个非常有用的特性,它允许你吧一些逻辑相关的类组织在一起,并控制内部类的可视性。

 

创建内部类

创建内部类就是把类的定义置于外围类的里面

 

public class Outer{class inner{private int i=11;public int value(){return i;}}
}

 内部类的访问规则

1:内部类可以直接访问外部类中的成员,包括私有

2:外部类要访问内部类,必须建立内部类对象

代码示例:

 

Outer.Inner in=newOuter().new Inner();//用到极少
in.method();

3:内部类成员和外部类成员对象类型和名称相同

内部类之所以能够访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式是Outer.this

 

class Outer{private int x=3;class Inner{void function(){int x=6;System.out.println("inner:"+this.x);//打印的值为6System.out.println("outer:"+Outer.this.x);//打印的值位3}}
}

 4:当内部类定义在外部类的乘员位置上,而且非私有,可以直接建立内部类对象

格式  外部类名.内部类名  变量名=外部类对象.内部类对象;

5:当内部类在乘员位置上,就可以被成员修饰符所修饰

比如:private:将内部类在外部类中进行封装

内部类可以被static修饰:内部类就具备了static的特性,当内部类被static修饰后,只能访问外部类中的静态成员变量了

静态内部类示例class Outer{

	class Outer{private static int x=3;static class Inner{void function(){System.out.println(x);//打印的值为3}}
}

 new Outer.Inner().function();//内部类对象调用function

new Outer.Inner.function();//这个是function为static的情况下

 PS:当内部类中定义了静态成员,该内部类必须是静态的

 

内部类定义在局部时,不可以被成员修饰符修饰,可以直接访问外部类中的成员,因为还持有外部类的引用,但是不可以访问他所在的局部中的变量,只能访问被final修饰的局部变量

 

匿名内部类:

1 匿名内部类其实就是内部类的简写格式

定义匿名内部类的前提内部类必须是继承一个类或者实现接口

//没有简化前

 

class ABSDemo{abstract void show();
}
class Outer{int x=3;class Inner extends ABSDemo{void show(){System.out.println(x);}}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部