内部类: 写在一个类内部的类
java中允许将一个类A声明再类B中,则类A就是内部类, 类B称为外部类
为什么要有内部类: 简答来说 比如一个人有个大脑 但是这个人的大脑是这个人独有的不是别人有的,所以这个大脑我们放在自己内部不暴露出去,
那为什么不去用私有一个变量或者方法来代表这个类呢? 因为大脑有很多的用途可以思考问题 提供人体必需物质等多个属性和方法所以定义一个内部类,
来只所属于这个人类的本身
内部类的总结
* 内部类的分类,成员内部类(静态的非静态的)Vs局部内部类(方法内, 代码块内,构造器内) * * 成员内部类: * 一方面作为外部类的成员 * > 调用外部类的结构 * > 静态的内部类只能调用外部静态的方法 * > 可以被static修饰 * > 可以被四种不同权限修饰 * * * 另一方面作为一个类 * >类内可以定义属性,方法, 构造器等 * >可以被final修饰不可以被继承, 不被final修饰可以被继承 * > 可以被抽象abstract修饰 * * * 4:关注如下的3个问题: * a: 如何实例化内部类成员对象 * b:如何在成员内部类中区分外部类结构 * c: 开发中局部内部类的使用
public class InnerClassTest { public static void main(String[] args) { // 实现静态的成员内部类 PersonTestOne.InnTestTwo innTestTwo = new PersonTestOne.InnTestTwo(); //实现非静态的成员内部类,因为是非静态的需要先实例化对象 然后去调用内部的非静态内部类,就是有了对象用对象去调用内部结构 PersonTestOne personTestOne = new PersonTestOne(); PersonTestOne.InnTestOne innTestOne = personTestOne.new InnTestOne(); innTestOne.innermethod(); } } class PersonTestOne{ String name = "外部类的name"; int age = 30; public void eat(){ System.out.println("吃饭"); } //静态成员内部类 static class InnTestTwo{ }; // 非静态内部类 class InnTestOne{ String name = "老王"; int age; public void show(){ System.out.println("非静态内部类的show方法"); }; public void innermethod(){ method1(); System.out.println(this.name); // 调用内部类属性 System.out.println(PersonTestOne.this.name); //调用外部类属性 } }; public static void method1(){ //静态方法 System.out.println("我是外部类的静态方法"); } public void mthod(){ // 局部内部类 class aa{}; } { //局部内部类 class cc{}; } }
如何实例化外部中的静态内部类:
直接在使用外部类.静态内部类就直接实例化
// 实现静态的成员内部类 PersonTestOne.InnTestTwo innTestTwo = new PersonTestOne.InnTestTwo();
如何实例化非静态内部类
外部类 外部类对象= new 外部类(); 外部类对象.内部类 对象名 = 外部类对象.new. 内部类(); //实现非静态的成员内部类,因为是非静态的需要先实例化对象 然后去调用内部的非静态内部类,就是有了对象用对象去调用内部结构 PersonTestOne personTestOne = new PersonTestOne(); PersonTestOne.InnTestOne innTestOne = personTestOne.new InnTestOne();
如何调用内部类中与外部类同名的属性
public void innermethod(){ method1(); System.out.println(this.name); // 调用内部类属性 System.out.println(PersonTestOne.this.name); //调用外部类属性 }
原文:https://www.cnblogs.com/zhaoyunlong/p/11734562.html