内部类概念:把类写在其他类的内部,可以写在其他类的成员位置和局部位置,这个时候写在其他类内部的类就成为内部类
什么时候用:当描述一个事物的时候,如果这个事物内部还包含其他的类,那就可以用内部类来描述事物包好的食物
分类:内部成员类,局部内部类
成员内部类:写在类的成员变量或成员方法处
定义格式:
class 外部类 { 修饰符 class 内部类 { //其他代码 } }
访问方式:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
代码演示,定义一个内部类
package com.oracle.demo03; public class Outer { int num=1; //成员内部类 class Inner{ int num=2; public void in(){ int num=3; //System.out.println(num); num=3 //System.out.println(this.num);=2 System.out.println(Outer.this.num); } } }
访问调用
package com.oracle.demo03; public class test { public static void main(String[] args) { Outer.Inner oi=new Outer().new Inner(); oi.in(); } }
局部内部类:定义在外部方法中的局部位置,访问方式和局部变量相似
定义格式:
class 外部类 { 修饰符 返回值类型 方法名(参数) { class 内部类 { //其他代码 } } }
访问方式:在外部类方法中,创建内部类对象,进行访问
代码 定义一个局部内部类
package com.oracle.demo04; //外部类 public class Outer { public void out(){ //局部内部类 class Inner{ public void in(){ System.out.println("这是局部内部类方法"); } } //调用方法 Inner in=new Inner(); in.in(); } }
访问调用
package com.oracle.demo04; public class test { public static void main(String[] args) { Outer outer=new Outer(); outer.out(); } }
内部类在实际中的使用:匿名内部类
概念:1.临时定义某一个指定类型的子类
2.顶一哈即可创建刚刚定义的这个子类的对象
作用:匿名内部类是创建某个类型子类对象的快捷方式
格式
new 父类或接口(){ //进行方法重写 };
例子:
package com.oracle.demo05; public interface Smoking { public abstract void smoke(); public abstract void eat(); }
package com.oracle.demo05; public class test { public static void main(String[] args) { //匿名内部类对象 //new 父类或接口(){ 进行方法重写 } new Smoking(){ public void smoke(){ System.out.println("抽烟"); } public void eat(){ System.out.println("吃饭"); } }.smoke();; } }