目录
前言
内部类,就是一个类内部包含另一个类,即一个事物的内部包含着另一个事物。
例如:身体和心脏 、汽车与发动机之间的关系。
一、成员内部类
1.间接方式,在外部类的方法中使用内部类,main只调用外部类中的方法
Body
package demo07; public class Body { //外部类 public class Heart{ //成员内部类 //内部类方法 public void beat(){ System.out.println("内部类中的方法beat"); System.out.println("心脏跳动~~~~~"); } } //外部类方法 public void methodBody(){ System.out.println("外部类中的方法methodBody"); System.out.println("这是我的身体~~~~~"); Heart heart = new Heart(); // 可写成 new Heart().beat(); 匿名对象 heart.beat(); } }
demo07InnerClass
package demo07; public class demo07InnerClass { public static void main(String[] args) { Body body = new Body(); //通过外部类的对象,调用外部类的方法,里面间接再使用内部类Heart body.methodBody(); } }
可以看见在out下的内部类文件命名规则是 外部类$内部类.class
运行结果 !
2.直接方式 使用公式直接新建一个内部对象
类名称 对象名 = new 类名称();
外部类名称.内部类名称 对象名 = new 外部类名称().new 外部类名称();
Body.Heart heart = new Body().new Heart();
把这条公式插入到demo07InnerClass 中 使用heart.调用内部类方法
二、局部内部类(包含匿名内部类)
如果一个类是定义在一个方法内部的,那么这是一个局部内部类。只有当前所属的方法能使用它,出了这个方法外面就不能用了。
1.建一个局部内部类
package demo09; public class Outer { public void MethodOuter(){ class Inner{ // 局部内部类 public void methodInner(){ System.out.println("内部方法"); } } Inner inner = new Inner(); inner.methodInner(); } }
2.调用局部内部类
调用普通外部类方法MethondOuter 方法内自己调用局部内部类methodInner
package demo09; public class Demomain { public static void main(String[] args) { Outer obj = new Outer(); obj.MethodOuter(); } }
总结
定义一个类的时候的权限修饰符
外 部 类 :public / default
成员内部类:public / protected / (default)/private
局部内部类:什么都不能写