关于java的内部类

关于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("吃");
    }
}

我们执行以下代码,输出一个结果。

吃

进程结束......

你可能感兴趣的:(java,开发语言)