JAVA内部类

内部类

内部类的概念

  • 内部类其实就是在一个类的内部再定义一个类。例如A类中定义一个B类,那么B类对A类来说就是一个内部类,而A类对B类来说就是一个外部类。

    主要分为以下几个类:

    1. 成员内部类
    2. 静态内部类
    3. 局部内部类
    4. 匿名内部类
  • 注意:内部类有区别于父子类继承关系

  • 内部类对象的创建依赖于外部类对象

  • 内部类对象持有指向外部类对象的引用

成员内部类

  • 在书写好内部类和外部类之后,需要通过外部类来实例化内部类,这样内部类才能发挥自己本身有的一些方法,具体如代码例子
package Demo02;
//外部类
public class Outside {
    private int LuckyNumber=6;
    public void say(){
        System.out.println("I'm an Outer!");
    }
    //内部类
    public class Inside{
        public void hey(){
            System.out.println("I'm an Inner!");
        }
        //内部类可以直接访问外部类的一些方法或者变量
        //静态内部类不能访问外部类的属性方法
        public void getLuckyNumber(){
            System.out.println("Hey! my lucky number is "+LuckyNumber);
            say();
        }

    }
}
package Demo02;
//测试用类
public class Test {
    public static void main(String[] args) {
        Outside outside = new Outside();   //创建一个指向Outside对象的引用变量outside,类型为Outside
        Outside.Inside inside = outside.new Inside();   //利用外部类来引用其中的内部类,并创建一个指向被外部类指向的内部对象的一个引用变量inside,类型为内部类Inside
        outside.say();  //用引用变量outside指向外部类Outside中的方法进行调用。
        inside.hey();  //用内部类的引用变量inside指向内部类Inside中的方法进行调用
        inside.getLuckyNumber(); //利用内部类的方法获取外部类的变量和方法,连私有变量也可以获取

    }
}



/*输出结果:
I'm an Outer!
I'm an Inner!
Hey! my lucky number is 6
I'm an Outer!
*/

静态内部类

  • 如果将内部类用static修饰,那么最先执行的会是内部类里面的内容,原因是static的静态方法区是和类同时加载的,而外部类的属性若不为static类型,则先加载的会是static类型的静态内部类的内容
  • 注意:普通的内部类可以直接访问外部类中的static方法和属性,静态内部类也可以,但是有一点要注意,如果内部类是静态内部类,则如需访问外部类的属性和方法,就需要将外部类的属性和方法转换为static类型。

局部内部类

  • 一个java文件中可以有多个class类,但是只能有一个public类型的类。
  • 其次,方法里面也可以写类,例如在外部类里面的方法中书写其他的class类,而且局部内部类里面也可以写一些方法。

匿名内部类

  • 匿名内部类即是没有进行初始化的类,即没有引用变量的类
  • 这种匿名内部类不用将实例保存在变量中,可以直接实例化后直接调用其内部的方法。

代码例子:

package Demo02;

public class Outside {
    ........
}
class Unname{
    public void WithOut(){
        System.out.println("我是匿名内部类");
    }
}
package Demo02;

public class Test {
    public static void main(String[] args) {
        new Unname().WithOut();
    }
}
//接口也同样适用



//输出结果:我是匿名内部类
上一篇:css文字环绕之shape-outside


下一篇:is outside repository 解决办法