关于java的内部类
我们在上一篇文章中了解了java中的接口,以及接口中定义的方法,接口的多继承等等。我们本篇文章来了解一下java的内部类,这个对我们后续学习多线程的线程的时候,会有很大的帮助😀。
一、什么是内部类
- 内部类就是在一个类的内部,再定义一个类。
比如A类中定义了一个B类,B类对于A类来说就称之为内部类,A对于B来说就是外部类。
二、内部类的调用
1、我们新建一个软件包,Demo12,然后再里面新建一个Outer类,并且定义一些属性和方法。
package oop.Demo12;
public class Outer
{
private int id;
public void out()
{
System.out.println("这是外部类的方法!");
}
}
2、我们在这个类里面再写一个类Inner。
package oop.Demo12;
public class Outer
{
private int id=10;
public void out()
{
System.out.println("这是外部类的方法!");
}
public class Inner
{
public void in()
{
System.out.println("这是内部类的方法!");
}
}
}
3、 我们在main方法中,先实例化一个外部类(这里大家应该都会了new😉),然后我们用奇葩写法实现内部类的实例化。
package oop.Demo02;
import oop.Demo12.Outer;
public class Application {
public static void main(String[] args)
{
Outer outer = new Outer();
//通过这个外部类来实例化内部类
Outer.Inner inner =outer.new Inner();
inner.in();
}
}
这是内部类的方法!
4、获取外部类的私有属性。
package oop.Demo12;
public class Outer
{
private int id;
public void out()
{
System.out.println("这是外部类的方法!");
}
public class Inner
{
public void in()
{
System.out.println("这是内部类的方法!");
}
//获取外部类的私有属性,私有方法
public void getID()
{
System.out.println(id);
}
}
}
5、我们执行一main方法。
package oop.Demo02;
import oop.Demo12.Outer;
public class Application {
public static void main(String[] args)
{
Outer outer = new Outer();
Outer.Inner inner =outer.new Inner();
inner.getID();
}
}
10
三、静态内部类
- 静态内部类不能访问非静态外部类的属性。
package oop.Demo12;
public class Outer
{
private int id;
public void out()
{
System.out.println("这是外部类的方法!");
}
public static class Inner
{
public void in()
{
System.out.println("这是内部类的方法!");
}
public void getID()
{
System.out.println(id);//无法访问,编译器会报错
}
}
}
四、测试类
- 一个java类中,可以有多个class类,但是只能有一个public class 类。
package oop.Demo12;
public class A
{
}
class B
{
}
class C
{
}
五、局部内部类
- 在方法中写一个类,就叫做局部内部类,之前我们学习过全局变量和局部变量,可以进行相似理解🤔。
package oop.Demo12;
public class A
{
//局部内部类
public void method()
{
class Inner
{
public void in()
{
}
}
}
}
六、匿名内部类
- 没有名字的初始化类,不用将实例保存到变量中。
package oop.Demo12;
public class Test
{
public static void main(String[] args) {
new Apple().eat();//没有对象名字
}
}
class Apple
{
public void eat()
{
System.out.println("吃🍎");
}
}
我们执行以下代码,输出一个结果。
吃🍎
进程结束......