【JAVASE_学习笔记】内部类
来源:互联网 发布:高跟鞋推荐 知乎 编辑:程序博客网 时间:2024/06/05 17:40
【JAVASE_学习笔记】内部类
内部类:在一个类的内部定义另外一个类,另外一个类称为内部类
内部类的class文件名:外部类$内部类.class
内部类的类型:成员内部类:在外部类的成员位置
局部内部类:在外部类的局部位置
内部类的好处:可以直接访问外部类的所有成员
应用场景:在描述A事物时,A事物内部还维护了另外一个B事物,且B事物必须要访问到A事物的成员,这时可以用内部类来描述B事物
成员内部类
访问方式:
方式一:在外部类提供一个方法创建内部类的对象进行访问
方式二:在其他类中直接创建内部类的对象进行访问
Outer.Inner inner=new Outer().new Inner();
格式:外部类.内部类 变量名=new 外部类().new 内部类();
举例:
//测试类public class Demo1 { public static void main(String[] args) { Outer o=new Outer(); o.useMethod(); //直接在测试类中创建内部的对象进行访问 Outer.Inner oi=new Outer().new Inner(); oi.method(); }}//外部类class Outer{ String name; //内部类 class Inner{ public void method(){ System.out.println("今天是个学习Java的好日子!"); } } //外部类提供一个方法创建内部类的对象进行访问 public void useMethod(){ Inner i=new Inner(); i.method(); }}
注意:
1.内部类可以访问外部类的所有成员(包括私有)
2.内部类与外部类存在同名成员时,在内部类中默认是访问内部类的成员,可以通过“外部类.this.成员”进行指定访问外部类的成员
3.私有的成员内部类只能通过在外部提供一个公共的方法进行访问,在其他类无法访问(private只是为了数据安全)
4.如果一个成员内部类定义了静态的成员,则该类也必须使用static修饰,静态成员内部类只能访问外部类的static成员变量
因为:静态成员变量是不依赖对象而存在的
静态成员内部类在其他类创建对象的格式:
外部类.内部类 变量名=new 外部类.内部类();
举例:
//测试类public class Demo2 { public static void main(String[] args) { Outer2.Inner2 oi2=new Outer2.Inner2(); oi2.getStaticParm();//损伤 Outer2 o=new Outer2(); o.method();//心脏 人体 }}//外部类class Outer2{ String type="人体"; int age; static String mod="损伤"; //私有的内部类 private class Inner{ String type="心脏"; public void getparm(){ System.out.println(type); System.out.println(Outer2.this.type);//可以通过外部类.this.成员指定访问外部类的成员 } } //成员内部类定义了静态的成员,该类也必须用static修饰 static class Inner2{ private int weight; static String color; //静态成员内部类只能访问静态的成员变量 public void getStaticParm(){ System.out.println(mod); } } //私有的成员内部类只能用外部类的方法进行访问 public void method(){ Inner i=new Inner(); i.getparm(); }}
局部内部类
如果局部内部类要访问局部变量,则局部变量必须用final修饰(jdk1.8不会报错——封装好了)
举例:
//测试类public class Demo3 { public static void main(String[] args) { Outer3 o=new Outer3(); o.method();//10 }}//外部类class Outer3{ String name; public void method(){ final int a=10;//被局部内部类访问的局部变量必须用final修饰 //局部内部类 class Inner{ public void getParm(){ System.out.println(a); } } //局部内部类可以在外部类的局部方法内,局部内部类外创建内部类的对象访问内部类的方法 Inner i=new Inner(); i.getParm(); }}
匿名内部类
没有类名的内部类
使用前提:必须存在继承或者实现关系
举例:
//测试类public class Demo4 { public static void main(String[] args) { Outer4 o=new Outer4(); o.print(); }}//抽象类abstract class Animal{ public abstract void eat(); } //接口interface Hibernation{ public abstract void hibernation(); public abstract void sleep();}class Outer4{ public void print(){ //创建的是Animal的子类对象 new Animal(){ public void eat() { System.out.println("猫吃鱼"); } }.eat();//猫吃鱼 //当接口中有多个方法时,运用多态可以调用多个方法 Hibernation h=new Hibernation(){ public void hibernation(){ System.out.println("有些动物会冬眠"); } public void sleep() { System.out.println("有些动物会进行深层睡眠"); } }; h.hibernation();//有些动物会冬眠 h.sleep();//有些动物会进行深层睡眠 }}
- 【JAVASE_学习笔记】内部类
- 内部类学习笔记
- 内部类学习笔记
- 内部类学习笔记
- 《内部类》学习笔记
- 内部类学习笔记
- 内部类学习笔记
- 内部类学习笔记
- 【JAVASE_学习笔记】基础知识
- 【JAVASE_学习笔记】数据类型
- 【JAVASE_学习笔记】数组
- 【JAVASE_学习笔记】多态
- 【JavaSE_学习笔记】泛型
- tij学习笔记 内部类
- java学习笔记-内部类
- JavaSE学习笔记--内部类
- TIJ学习笔记-内部类
- [学习笔记]Java内部类
- HTML 常用样式调整
- MYbatis配置文件出错
- 1024 MyBatis
- 2017年10月24日java笔记
- 图像处理中卷积的实现
- 【JAVASE_学习笔记】内部类
- ping命令查看网络情况
- 使用Jenkins+xcodebuild搭建iOS的持续集成系统
- 在Win7下删除Ubuntu系统分区后未分配空间如何恢复到原来的磁盘?
- 简单的form表单
- jstl 或者el表达式如何读取request中的对象
- npm install 报错的解决办法
- Java中的static关键字解析[转载]
- Windows虚拟桌面资料