内部类
来源:互联网 发布:网络运维 英文缩写 编辑:程序博客网 时间:2024/06/05 16:44
内部类
含义:内部类是指在一个类里面在定义一个类,叫做内部类。类名不需要和文件名相同。
内部类可以是静态static的,也可以是public、private、protected和default修饰的。(外部类类名必须和文件名相同)
- 内部类是编译时的概念,一旦编译成功就会成为两个不同的类。例如定义一个名Outer的外部类,内部类定义为Inner。编译后就会出现outer.class和outer$inner.class两个类,所以,内部类的成员和方法名可以和外部类相同。
内部类可以直接访问外部类的成员,外部类访问内部类需要先new对象。
内部类可以分为:成员内部类、 静态内部类,匿名内部类和局部内部类四种。
1、成员内部类:
成员内部类,就是作为外部类的成员,可以直接使用外部类所有的成员和方法,即使外部类的成员用private修饰的,也仍然可以使用。同时,外部类访问内部类的成员和方法,需要通过内部类的对象去获取。具体操作Outer.Inner inner=new Outer().new Inner()
代码实例:
public class Outer{ public staitc void main(String[] args){ Outer outer = new Outer(); //创建外部类对象 Outer.Inner inner = outer.new Inner();//外部类访问内部类方法 inner.print("外部类调用内部类"); inner = outer.getInner(); inner.print("内部类使用外部类方法"); } public Inner getInner(){ return new Inner(); } public class Inner{//定义内部类 public void String(Str){ System.out.println(str); } }}
输出结果:
外部类调用内部类内部类使用外部类方法
2、静态内部类:
被static修饰的内部类称为静态内部类。
- 静态内部类不需要有外部类对象。(静态内部类创建不需要有外部类)
- 静态内部类不能访问非静态成员。
代码实例:
public class Outer { //外部类private String sex;public static String name = "张三";static class Inner{ //静态内部类 public static String name1 = "李四"; //在静态内部类中可以存在静态成员 public void display(){ //静态内部类不能访问非静态的方法。不过可以和外部类方法同名。 System.out.println("外部类 name :" + name); }}public void display(){ System.out.println("内部类 name: "+Inner.name1);//外部类访问静态内部类:内部类.成员属性 new Inner().display(); //静态内部类 可以直接创建实例不需要依赖于外部类}public static void main(String[] args) { Outer outer = new Outer(); outer.display(); }}
输出结果:
内部类 name: 李四外部类 name: 张三
3、匿名内部类:
匿名内部类,从字面意思上说,匿名就是没有名字,没有名字的类。
- 匿名内部类只使用一次的类,通常定义成匿名内部类。
- 匿名内部类不能有构造方法。
- 匿名内部类不能有public、static、default和protected修饰,也就是说没有访问修饰符。
- 匿名内部类不能定义任何静态成员,静态方法。
代码实例:
public class Outer { //定义外部类public Inner getInner(final int num){ return new Inner(){ //匿名内部类写法 int number = num + 3; public int getNumber(){ return number; } };}public static void main(String[] args) { Outer out = new Outer(); Inner inner = out.getInner(2); System.out.println("和为:"+inner.getNumber());}class Inner { //定义内部类 int getNumber() { return 0; } }}
输出结果:
和为:5
4、局部内部类:
局部内部类:在方法、构造方法或者静态代码块等内部定义的类成为局部内部类。
- 局部内部类不能加任何权限修饰符,因为他只对局部有效。
- 局部内部类可以用final、abstract修饰。
- 访问局部内部类必须先有外部类对象。
- 如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量,
用this.变量名访问的是内部类变量,用外部类名.this.内部类变量名访问的是外部类变量。
代码实例:
public class Parcel {private void internalTracking(boolean b) { if (b) { class TrackingSlip { private String id; //局部内部类的成员属性 TrackingSlip(String str) { //局部内部类构造方法 id = str; } String getSlip() { // 局部内部类的成员方法 return id; } } TrackingSlip ts = new TrackingSlip("局部内部类被调用了"); String string = ts.getSlip(); //调用局部内部类的方法:对象.方法名(局部内部类里面的) System.out.println(string); // 测试打印语句 } } public void track() { internalTracking(true); } public static void main(String[] args) { Parcel parcel = new Parcel(); parcel.track(); }}
输出结果:
局部内部类被调用了
阅读全文
0 0
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- Android Studio 常用快捷键
- USB 2.0 协议中J、K、SE0状态的定义
- Android 图片高斯模糊解决方案
- python3单元测试unittest
- U盘刻录操作系统的详细步骤
- 内部类
- 李开复 反思前半生 感悟
- unit10-Bash scripts 1
- (6/13)JSTL标签库
- 【MFC】多线程计算圆周率π的值
- 【剑指offer-解题系列(59)】对称的二叉树
- 流程控制语句—顺序结构语句及键盘录入
- Linux日常——信号(3)之线程安全和可重入函数
- Remove Duplicates from Sorted List