Java嵌套类,内部类和外部类
2024-09-06 15:25:37
1.嵌套类,内部类
嵌套类是指被定义在一个类内部的类;
JAVA的嵌套类有很多种类:1.静态成员类;2.非静态成员类;3.匿名类;4.局部类;其中,除了静态成员类之外,其他的都是内部类,因为静态成员类更像是一个独立的类;
但是静态成员类,是外部类内部的一个成员,静态成员类的访问和其他的静态成员一样:1.通过外部类类名调用;2.如果静态成员类定义为私有,那么只能在外部类内部使用
JAVA 内部类可以很好的实现隐藏,并且内部类拥有外围类的所有元素的访问权限,可是实现多重继承,并且可以避免修改接口而实现同一个类中两种同名方法的调用。
内部类有以下特点:
1.内部类中如果有static的属性,或者方法,那么这个内部类必须是static class;
2.一个内部类是static内部类,可以有非static的方法和属性;
2.外部类和内部类
2.1.外部类访问内部类的属性或方法
可以通过new 对象,外部类可以调用内部类的所有域的属性和方法;
public class Outer {
private String name = "张三";
public int age = 10;
private void outerMethod(){
Inner inner = new Inner();
int age = inner.innerAge;
String name = inner.innerName;
inner.innerMethod();
System.out.println("outer method");
} class Inner{
private String innerName = "Inner";
public int innerAge = 14;
public void innerMethod(){
System.out.println("inner start");
System.out.println("inner end");
}
}
2.2.内部类访问外部类的方法和属性
可以通过 外部类.this.内部类方法(属性)的方式调用所有域的属性和方法
public class Outer {
private String name = "张三";
public int age = 10;
private void outerMethod(){
System.out.println("outer method");
} class Inner{
public void innerMethod(){
System.out.println("inner start");
Outer.this.outerMethod();
String name = Outer.this.name;
int age = Outer.this.age ;
System.out.println("inner end");
}
}
}
2.3 内部类调用内部类
和外部类调用内部类一样,用 new 对象的形式,可以访问另一个内部类的所有域属性和方法;
3.如何调用用一个类的内部类
一般通过两种方式:第一种:new outer().new inner();第二种:new outer().getInner();通过方法获取;
public class Outer {
public Inner getInner(){
return new Inner();
};
class Inner{
private String innerName = "Inner";
public int innerAge = 14;
}
}
class Test{
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
Outer.Inner inner1 = new Outer().getInner();
}
}
参考资料:《effective java》
最新文章
- laravel 操作 redis
- Spring系列之AOP实现的两种方式
- MVC 上传 下载
- 部署额外域控制器,Active Directory
- 翻译:AKKA笔记 - Actor消息 -1(二)
- C#的一维数组和二维数组定义方式:
- iOS Runtime原理及使用
- Python之Flask Web开发
- rsync 无密码传输文件
- delphi获得当前鼠标坐标
- Storm系列(九)架构分析之Supervisor-同步Nimbus的事件线程
- Visual studio 2015程序转Eclipse gun编译出现的问题总结
- 15一个NoSql数据库
- java 线程方法join的简单总结
- 去掉chrome浏览器中input获得焦点时的带颜色边框呢
- 2.Cocos2d-x-3.2编写3d打飞机,项目代码总结
- node.js代理设置
- 目标指定法——S.M.A.R.T.
- final可以修饰类、属性、方法。
- [USACO08DEC]Secret Message