本系列博客汇总在这里:Java系列_汇总
目录
- 一、简介
- 二、私有内部类
- 三、静态内部类
- 四、匿名类
- 五、局部内部类(了解)
- 六、匿名内部类
一、简介
- 定义:把一个类定义到另一个类中,那么内部的类就是内部类。
- 注意:内部类不能直接创建。
- 创建内部类的语法:
外部类.内部类 变量名 = new 外部类.new内部类对象
- 内部类的外部类的方法如果想要访问内部类的方法,必须创建内部类的对象,根据内部类的对象来访问。
- 示例
-
//Outter 类里再建 Inner 类
class Outter
{
private static int num = 1;
//定义内部类
class Inner
{
//定义属性
int num1;
//定义方法
public void show()
{
System.out.println("通过内部类的方法show打印num1:"+num1);
}
}
public void method()
{
Inner inner = new Inner();
inner.show();
}
}
class Welcome
{
public static void main(String[] args)
{
Outter out = new Outter();
out.method();
//内部类不能直接创建对象
//Inner inner = new Inner();
Outter.Inner inner = new Outter().new Inner();
//访问内部类方法
inner.show();
}
}
二、私有内部类
1、内部类被 private 来修饰,被 private 修饰的内部类只能在它所属的外部类中访问,非所属的外部类不能访问,出现错误
三、静态内部类
- 静态内部类的创建语法:
外部类名.内部类名 变量名 = new 外部类名.内部类对象
- 内部类可以是 static 的, 静态内部类只能访问它的外部类的静态属性。
- 示例
\\Outter 类里再建 Inner 类
class Outter
{
private int num = 1;
//内部类可以是static的,定义一个静态内部类
//静态内部类只能访问它的外部类的静态属性
static class Inner
{
public static void show()
{
System.out.println("show1静态方法被调用,num ="+num);
}
}
}
//主类
class Welcome
{
public static void main(String[] args)
{
//静态内部类对象的创建
Outter.Inner inner = new Outter.Inner();
inner.show();
}
}
四、匿名类
- 注意区分匿名类和匿名对象
- 示例
interface MyInter
{
public void method();
}
class Myclass
{
public void method()
{
System.out.println("实现了method方法");
}
}
class Welcome
{
public static void main(String[] args)
{
//创建匿名对象调用method。这个对象很快就会被垃圾回收机制回收(一次性的)
new Myclass().method();
//接口是不能实例化的,在匿名类创建的时候我们可以借助接口
//创建了一个没有名字但是实现了MyInter接口的类的对象,用完就会被回收掉
new MyInter()
{
public void method()
{
int i = 1;
System.out.println("匿名类的对象的方法被调用"+i);
}
}.method();
System.out.println("------------------------");
//创建匿名类的对象赋值给接口引用变量mi
MyInter mi = new MyInter()
{
int i = 3;
public void method()
{
System.out.println("匿名类1的对象的方法被调用"+i);
}
};
mi.method();
}
}
五、局部内部类(了解)
- 把内部类定义到方法中,局部内部类。
- 示例
- 在外部类 Outter 的方法当中定义内部类 Inter
class Outter
{
private static int num = 4;
public void method()
{
//在方法中定义的类叫局部内部类
class Inter
{
int num1 = 5;
public void show()
{
System.out.println("局部内部类中的方法被调用"+num1);
}
}
//创建局部内部类的对象
Inter inner = new Inter();
//调用局部内部类的方法
inner.show();
}
}
class Welcome
{
public static void main(String[] args)
{
Outter out = new Outter();
out.method();
}
}
六、匿名内部类
- 什么是匿名内部类:没有名字的类,这种类需要在接口上实现。
- 匿名类和匿名类内部类都需要接口或者抽象类的支持。
- 创建一个匿名的类的对象实现OuterInter的接口,在大括号中实现接口中的方法,方法调用完毕后就会被垃圾回收机制回收。
- 示例
interface MyInter
{
public void show();
}
class Outter
{
private static int num = 4;
public void method()
{
new MyInter ()
{
int i = 9;
public void show()
{
System.out.println("我是匿名内部类");
}
}.show();
}
}
class Welcome
{
public static void main(String[] args)
{
Outter out = new Outter();
out.method();
}
}
如有错误,欢迎指正!