您的位置:首页 > 其它

内部类

2020-11-03 22:03 495 查看
what:
在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类。
how:
格式:
class 外部类名{
修饰符 class 内部类名{
}
}
why:
1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
2. 对于同一个包中的其他类来说,内部类能够隐藏起来。
3.匿名内部类可以很方便的定义回调。
4.使用内部类可以非常方便的编写事件驱动程序
内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
成员内内部类
成员内部类:定义在类中方法外的类。
格式:
public Class OutClassName{
Class InnerClassName{
//,,,

}
//,,,
}
如:汽车事务和引擎事物 引擎在汽车事物的内部
public class Car{//car就是内部类
class Engin{//engin就是内部类
//,,,

}
//成员方法 move
public void move(){
System.out.printin("汽车在行走!");
}
}
创建内部类对象的格式:
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();

示例代码:

/* *
*定义一个外部类身体 body
*/
public class Body {
//定义身体是否还在或者  私有的
private boolean islive = true;//ture代表活着

//定义一个内部类 Heart
public class Heart {

//定义一个心脏跳动功能
public void beating() {
if (islive) {
System.out.println("心脏在跳动");
} else {
System.out.println("心脏不跳动了");
}
}
}

//提供get set 方法
public boolean isIslive() {
return islive;
}

public void setIslive(boolean islive) {
this.islive = islive;
}
}
//测试
public static void main(String[] args) {
//创建外部类   不能直接创建外部类
Body body = new Body();
//创建内部类对象
// 格式:外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
Body.Heart heart = body.new Heart();

//调用内部类方法 jump() 心脏跳动
heart.beating();
//调用外部类方法
body.setIslive(false);//isLive=false;
//调用内部类方法
heart.beating();//此时isLive
}

运行结果:

心脏在跳动
心脏不跳动了
备注:内部类仍然是一个独立的类,在编译之后内部类会编译成独立的.class文件
但是.class文件名称时:外部类名$内部类名
如: Body$Heart.csass

匿名内部类

匿名内部类:是内部类的简化写法,它的本质是一个
《具体实现的》《父类或者父接口》《匿名》子类的对象。
在开发中,最常用的内部类就是匿名内部类。
示例:
以接口举例:当你使用一个接口的时候,你需要做如下操作:
·1定义子类。
·2重写接口中的方法。
·3创建子类对象。
·4调用重写后的方法。
我们的目的就是想调用接口中的某个方法,以上四部可以简化成一布操作
前提:
匿名内部类必须时继承一个父类或者实现一个父接口。
格式:
《类名不需要》
new 父类名或者父接口(){
//伴随着方法的重写
@overrode
public void method(){
//方法内容
}
}.method();
匿名内部类的本质
本质:是一个继承了该类或者实现了该接口的子类匿名对象
©著作权归作者所有:来自51CTO博客作者我是lsp的原创作品,如需转载,请注明出处,否则将追究法律责任
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: