04. 内部类
2024-04-09 20:40:07  阅读数 352

04. 内部类

1、类的五大成员

属性、构造方法、一般方法、块、内部类

这篇主要描写内部类。

下面代码演示类的结构:

package com.company.project.test.t41;

import java.sql.Struct;

import org.omg.CORBA.PUBLIC_MEMBER;

public class Demo {
//1属性
    String name;
//2.构造方法
    public Demo() {
        
    }
    
//3.方法
    public void funOuter1() {
        System.out.println("外部类方法");
    }
    
//4.块
    {
        
    }
    
//5.内部类 
  //5.1成员内部类
    class Inner{
        public void fun1() {
        name = "";  
        funOuter1();
        }
    }
    
   //5.2静态内部类
    static class StaticClass{
        
    }
    
   //5.3匿名内部类
        //通过接口创建匿名内部类
    Runnable runnable = new Runnable() {
        
        @Override
        public void run() {
            // TODO Auto-generated method stub
            
        }
    };
    
        //通过类创建匿名内部类
    Thread thread = new Thread() {
        public void run() {
            
        }
    };
    
   //5.4局部内部类
    public void funOuter2() {
        //作用范围仅限于所属方法,
        class A{
            
        }
        
        A a = new A();
    }
}

2、内部类

内部类分为4种:成员内部类、静态内部类、匿名内部类、局部内部类。

特点:可以共享外部类的成员(属性,方法)

2.1 成员内部类

public class Demo {
//1属性
    String name;
//3.方法
    public void funOuter1() {
        System.out.println("外部类方法");
    }
//5.内部类
//5.1 成员内部类
    class Inner{
        public void fun1() {
        name = "";  
        funOuter1();
        }
    }
}

特点:要使用成员内部类的对象,外部类的对象必须存在。

实例化:

package com.company.project.test.t41;


public class Client {
    public static void main(String[] args) {
    //内部类的实例化
    //5.1成员内部类
        Demo.Inner inner = new Demo().new Inner();
}

2.2 静态内部类

public class Demo {
//1属性
    String name;
//3.方法
    public void funOuter1() {
        System.out.println("外部类方法");
    }
//5.内部类
//5.2静态内部类
    static class StaticClass{
        
    }
}

特点:静态内部类,把外部类当作特殊的包使用,所以实例化时new 后面的Demo不需要小括号(和成员内部类区别)。

实例化:

package com.company.project.test.t41;


public class Client {
    public static void main(String[] args) {
    //内部类的实例化
    //5.2静态内部类的实例化
        //静态内部类,把外部类当作特殊的包使用
        Demo.StaticClass staticClass = new Demo.StaticClass();
    }
}

2.3 匿名内部类

分为两种:通过接口创建和类创建。

特点:简化了一些临时使用的类,小,方便,属于临时变量类。

      创建和实例化在一起。
public class Demo {
//1属性
    String name;
//3.方法
    public void funOuter1() {
        System.out.println("外部类方法");
    }
//5.内部类
 //5.3匿名内部类
        //通过接口创建匿名内部类
    Runnable runnable = new Runnable() {
        
        @Override
        public void run() {
            // TODO Auto-generated method stub
            
        }
    };
    
        //通过类创建匿名内部类
    Thread thread = new Thread() {
        public void run() {
            
        }
    };
}

2.4 局部内部类

特点:可以在方法中定义,并实例化,但使用地方仅局限在此方法中。

public class Demo {
//1属性
    String name;
//3.方法
    public void funOuter1() {
        System.out.println("外部类方法");
    }
//5.内部类
//5.4局部内部类
public void funOuter2() {
        //作用范围仅限于所属方法,
        class A{
            
        }
        
        A a = new A();
    }
}