内部类
2016-04-24 22:02
127 查看
public class OutClass1 {
//成员内部类
//位置:位于外部类的全局位置
//访问修饰符:决定能否在第三方类中使用该内部类
//class文件名:外部类名字$内部类名字。
//产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)
public class InnerClass1{
}
class ThirdClass1{
}
public class OutClass2 {
static int a;
// 静态内部类
// 位置:位于外部类的全局位置,但是添加static修饰符
// 访问修饰符:决定能否在第三方类中使用该内部类
// class文件名:外部类名字$内部类名字
//产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)
public static class InnerClass2 {
//属性可以定义静态和非静态的
private int innerFiled21;
private static int innerFiled22;
private int a;
}
class ThirdClass2{
}
public class OutClass3 {
}
public class OutClass4 {
}
//成员内部类
//位置:位于外部类的全局位置
//访问修饰符:决定能否在第三方类中使用该内部类
//class文件名:外部类名字$内部类名字。
//产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)
public class InnerClass1{
//属性:不能定义static的属性(常量可以是static) private int innerField1; //方法:不能定义static的方法 public void innerMethod(){ //可以访问外部类的任意属性和方法 //使用this代表的是内部类对象 //如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性 //如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法 } } public void outMethod(){ //可以直接产生内部类对象,然后无视访问修饰符视情况调用其属性和方法 InnerClass1 ic1 = new InnerClass1(); ic1.innerField1 = 199; }
}
class ThirdClass1{
public static void main(String[] args) { //在第三方类中产生内部类对象,必须先产生外部类对象 OutClass1 oc1 = new OutClass1(); //使用特殊外部类对象.new的语法产生内部类对象 OutClass1.InnerClass1 inc1 = oc1.new InnerClass1(); //根据访问修饰符视情况调用属性和方法 inc1.innerMethod(); }
}
public class OutClass2 {
static int a;
// 静态内部类
// 位置:位于外部类的全局位置,但是添加static修饰符
// 访问修饰符:决定能否在第三方类中使用该内部类
// class文件名:外部类名字$内部类名字
//产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)
public static class InnerClass2 {
//属性可以定义静态和非静态的
private int innerFiled21;
private static int innerFiled22;
private int a;
//方法可以定义静态和非静态的 public void innerMethod21() { //只能访问外部类的静态属性和静态方法 //this代表内部类对象 //如果属性方法出现同名的情况,用外部类类名.的方式特制外部类中的属性方法 } public static void innerMethod22() { //只能访问外部类的静态属性和静态方法 } } public void a(){ //直接new出内部类对象 InnerClass2 ic2 = new InnerClass2(); //用对象名.的方式访问内部类的非static属性和方法,无视访问修饰符 ic2.innerFiled21 = 100; //用内部类类名.的方式访问内部类的static属性和方法,无视访问修饰符 InnerClass2.innerMethod22(); }
}
class ThirdClass2{
public static void main(String[] args) { //无需产生外部类对象,使用外部类类名.内部类类名的方式产生内部类对象 OutClass2.InnerClass2 ic2 = new OutClass2.InnerClass2(); //根据访问修饰符,调用属性和方法 ic2.innerMethod21(); }
}
public class OutClass3 {
public void outMethod(){ //局部内部类 //位置:在外部类的某个方法内部 //访问修饰符:没有 //class文件名字:外部类类名&数字编号+内部类类名 //产生对象:只能在内部类所在的方法中 class InnerClass3{ //只能定义非static的属性和方法(常量可以是static) private int innerField31; public void innerMethod31(){ //如果outMethod是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问 //this代表当前内部类对象 //如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性 //如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法 //无法访问内部类所在方法的变量,只能访问常量 } } //直接new出来即可 InnerClass3 ic3 = new InnerClass3(); //无视访问修饰符视情况调用其属性和方法 ic3.innerField31 = 100; }
}
public class OutClass4 {
public static void outMethod(){ //匿名内部类 //位置:在外部类的某个方法内部,new对象的同时定义属性行为,所以只能用这一次 //访问修饰符:不存在 //class文件名:外部类的类名&数字编号 new Object(){ //只能定义非static的属性和方法(常量可以是static) private int innerField41; public void innerMethod41(){ //如果outMethod是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问 //this代表当前的匿名内部类对象 //如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性 //如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法 //无法访问内部类所在方法--即outMethod()中的的局部变量,只能访问常量 } }; }
}
相关文章推荐
- Redhat中安装rsync
- Java第八周学习总结
- Linux 网络层实现
- Spring定时任务的几种实现详解
- poj3249【拓扑排序】
- JAVA字符串格式化-String.format()的使用
- 关于IGMP协议的知识点汇总
- flex Spark和Halo(mx)
- 练习24:代码巩固练习
- C语言指针实现循环报数问题(简单约瑟夫环问题)
- 结构化思维(Structured Thinking)
- jQuery中.bind() .live() .delegate() .on()的区别
- 腾讯云服务器完美解决无法使用公网IP访问的问题
- 站立会议(6)
- 20145321 《Java程序设计》第8周学习总结
- django 使用内建过滤器实现文章摘要效果
- 20145206邹京儒《Java程序设计》第8周学习总结
- URAL 1841|Cableways|...
- 第二章节总结
- 使用Memcached、Spring AOP构建数据库前端缓存框架