Java的内部类总结

目录

  • 前言
  • 一,成员内部类
    • 1,成员内部类的特点
    • 2,成员内部类的实现
    • 3,内部类和外部类的关系
  • 二,静态内部类
    • 1,静态内部类的特点
    • 2,比较成员内部类和静态内部类
    • 3,静态内部类的实现
  • 三,方法内部类
    • 1,方法内部类的特点
    • 2,方法内部类的实现
  • 四, 匿名内部类
    • 1,匿名内部类的特点
    • 2,匿名内部类的实现
  • 总结

    前言 最近看了内部类后,总结一下,首先内部类嵌套在其他内部的类,根据出现的位置和关键字,可以分为以下四种类:成员内部类,静态内部类,方法内部类,匿名内部类,接下来就介绍下这四种类,记得耐心看哦

    一,成员内部类
    1,成员内部类的特点
    (1)private不可以用在外部类的声明,但可在内部类声明,成员变量可以是private
    (2)内部类,外部类可以相互访问彼此的私有域
    A:内部类访问外部类的私有域可以直接访问,因为成员内部类含有隐藏对象
    B:外部类访问内部类的私有域通过内部类对象访问
    (3)内部类可解决Java中单继承问题
    (4)内部类可以对外部隐藏

    2,成员内部类的实现
    public class Outter {// 成员变量private int age = 12; private String name = "zh"; private static final int A = 20; //成员内部类class Inner{private String a = "hello"; private int age = 20; public void test(){System.out.println(a); // 可以访问外部类的私有域ageSystem.out.println(Outter.this.age); //访问自己的ageSystem.out.println(this.age); System.out.println(A); }}// 外部类成员方法public void fun() {int a = 0; // 外部类内部创建内部类对象Inner inner = new Inner(); System.out.println(inner.a); }}class Test {public static void main(String[] args) {//外部类的外部创建内部类对象Outter.Inner inner = new Outter().new Inner(); }}public class Outter {// 成员变量private int age = 12; private String name = "zh"; private static final int A = 20; //成员内部类class Inner{private String a = "hello"; private int age = 20; public void test(){System.out.println(a); // 可以访问外部类的私有域ageSystem.out.println(Outter.this.age); //访问自己的ageSystem.out.println(this.age); System.out.println(A); }}// 外部类成员方法public void fun() {int a = 0; // 外部类内部创建内部类对象Inner inner = new Inner(); System.out.println(inner.a); }}class Test {public static void main(String[] args) {//外部类的外部创建内部类对象Outter.Inner inner = new Outter().new Inner(); }}


    3,内部类和外部类的关系
    A:成员内部类的创建需要依赖于外部类对象
    B:内部类和外部类之间相互独立
    C:两者的私有属性可以相互访问
    D:语法
    (1)外部类的内部创建内部类对象
    Inner inner = new Inner();

    (2)外部类的外部创建内部类对象
    Outter.Intter intter = new Outter().new Intter();

    E:在内部类的内使用隐藏的this

    二,静态内部类
    1,静态内部类的特点
    (1)定义在外部类的内部使用static修饰,静态内部类无需外部类无需外部类产生对象就可以使用
    (2)静态内部类的创建语法
    StaticInnerClass.Inner inner = new StaticInnerClass.Inner();


    2,比较成员内部类和静态内部类
    (1)成员内部类不能拥有静态域,但可以访问外部的静态域
    (2)静态内部类可以拥有成员域,但不能访问外部的成员域

    3,静态内部类的实现
    public class StaticInnerClass {static int age; String name; //静态内部类--类比--静态变量static class Inner{private int age; public void test(){System.out.println(age); //System.out.println(name); 不能访问外部成员域}}public void fun() {Inner inner = new Inner(); }}class Test1 {public static void main(String[] args) {StaticInnerClass.Inner inner = new StaticInnerClass.Inner(); }}


    三,方法内部类
    1,方法内部类的特点
    【Java的内部类总结】(1)方法内部类定义在方法内部
    (2)对外部完全隐藏,因此不能有任何访问修饰
    (3)若要方法的形参只能用,不能改(形参的隐式final声明)

    2,方法内部类的实现
    //方法内部类public class FunClass {private int age; public void fun(int age) {class Inner {void fun() {//System.out.println(age); }}age = 10; }}


    四, 匿名内部类
    1,匿名内部类的特点
    (1)匿名内部类定义在方法内部,类没有名字
    (2)必须继承一个抽象类或者实现一个接口
    (3)没有构造方法

    2,匿名内部类的实现
    //实现接口interface IMessage {void fun(); }public class NonNameClass {public static void main(String[] args) {//匿名内部类Thread thread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("hello A"); }}); Thread thread1 = new Thread({System.out.println("hello "); } ); thread.start(); thread1.start(); }}//实现接口interface IMessage {void fun(); }public class NonNameClass {public static void main(String[] args) {//匿名内部类Thread thread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("hello A"); }}); Thread thread1 = new Thread({System.out.println("hello "); } ); thread.start(); thread1.start(); }}


    总结 朋友们,看到最后是不是对内部类有了新的认识?
    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

      推荐阅读