黑马训练营——内部类
内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类。
内部类是一个非常有用的特性,它允许你吧一些逻辑相关的类组织在一起,并控制内部类的可视性。
创建内部类
创建内部类就是把类的定义置于外围类的里面
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);}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
