Java中成員內部類是指定義在類中的類,它可以訪問外部類的所有成員變量和方法,並且可以被外部類的方法調用。在實際開發中,成員內部類可以用於實現一些特定的操作和實現一些複雜的業務場景。
一、成員內部類的定義與實現
成員內部類的定義格式如下:
public class OuterClass { // 外部類成員變量 private int num = 10; // 內部類 public class InnerClass { // 內部類成員變量 private int innerNum = 20; // 內部類方法 public void innerMethod() { System.out.println("訪問外部類成員變量num:" + num); System.out.println("訪問內部類成員變量innerNum:" + innerNum); } } }
在上述代碼中,內部類InnerClass是定義在外部類OuterClass中的,可以直接訪問外部類的成員變量num。也可以定義自己的成員變量innerNum和方法innerMethod。
在外部類中創建內部類對象的方式如下:
public class Test { public static void main(String[] args) { OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); inner.innerMethod(); } }
在上述代碼中,首先創建外部類OuterClass對象outer,然後通過outer.new InnerClass()的方式創建內部類InnerClass對象inner,並調用inner的innerMethod()方法。
二、成員內部類的應用
1、實現特定的操作
成員內部類可以實現一些特定的操作,例如在集合類中定義遍歷器Iterator的時候就可以使用內部類來實現。例如:
import java.util.ArrayList; import java.util.Iterator; public class MyList { private ArrayList list = new ArrayList(); public void add(String str) { list.add(str); } public void remove(String str) { list.remove(str); } // 定義遍歷器 public Iterator iterator() { return new MyIterator(); } // 內部類 private class MyIterator implements Iterator { private int currentIndex = 0; @Override public boolean hasNext() { return currentIndex < list.size(); } @Override public String next() { return list.get(currentIndex++); } @Override public void remove() { list.remove(currentIndex); } } }
在上述代碼中,定義了一個集合類MyList,其中定義了一個內部類MyIterator來實現遍歷器Iterator的接口。通過內部類MyIterator的實現,可以輕鬆的對集合對象進行遍歷操作。
2、實現複雜的業務場景
成員內部類可以用於實現一些複雜的業務場景,例如在網絡編程中可以使用成員內部類來實現客戶端和服務端之間的通信。下面是一個簡單的例子:
import java.net.Socket; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.InputStreamReader; public class Client { // 內部類SocketThread private class SocketThread extends Thread { private Socket socket; public SocketThread(Socket socket) { this.socket = socket; } @Override public void run() { try { // 獲取輸出流 BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream()); // 發送消息 String message = "Hello Server!"; out.write(message.getBytes()); out.flush(); // 獲取輸入流 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 接收消息 String response = in.readLine(); System.out.println("服務器返回消息:" + response); // 關閉資源 out.close(); in.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { try { // 創建Socket對象 Socket socket = new Socket("127.0.0.1", 8888); // 創建內部類SocketThread對象,啟動線程 Client client = new Client(); SocketThread socketThread = client.new SocketThread(socket); socketThread.start(); } catch (Exception e) { e.printStackTrace(); } } }
在上述代碼中,定義了一個客戶端類Client,在客戶端類中定義了一個內部類SocketThread來實現客戶端和服務端之間的通信。通過成員內部類的方式,可以實現客戶端和服務端之間的高效通信。
總結
成員內部類可以訪問外部類的所有成員變量和方法,並且可以被外部類的方法調用。在實際開發中,成員內部類可以用於實現特定的操作和實現複雜的業務場景。通過內部類的方式,可以有效的提高程序的可讀性和可維護性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/190344.html