首頁 >Java >java教程 >Java 中的巢狀類別

Java 中的巢狀類別

WBOY
WBOY原創
2024-08-30 16:00:19742瀏覽

巢狀類別是指位於另一個類別內部的類別。 Java允許我們在java中建立巢狀類別。嵌套類別是其外部類別的成員之一。它還可以聲明為公共、私有、受保護或預設。嵌套類別可以存取外部類別的其他成員,反之則不可能。這意味著外部類別無法存取巢狀類別成員,因為巢狀類別是其封閉外部類別的成員,因此點 (.) 用於存取巢狀類別及其成員。巢狀類別沒有任何靜態關鍵字。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

Java 中嵌套類別的類別

巢狀類別分為兩類:

  1. 靜態巢狀類別: 我們將使用關鍵字「static」宣告的巢狀類別稱為靜態巢狀類別。靜態巢狀類別可以透過引用外部類別來存取。具有靜態類別的巢狀類別無法存取外部類別的非靜態變數和方法。
  2. 內部類別:非靜態巢狀類別是未靜態宣告的內部類別。 即使宣告為私有,靜態巢狀類別也無法存取所有靜態和非靜態變數和方法。內部類別也有兩種類型。
  • 本地內部類別
  • 匿名內部類別

文法:

在下面的語法中,OuterClass 有一個內部類別 InnerClass,稱為巢狀類別。

//Outer class
class OuterClass {
//Inner class as a nested class
class InnerClass {
....
}
}

Java 中嵌套類別的使用

在程式設計世界中,Nested 類別扮演著重要的角色,如下所示:

  • 類別的巢狀就像將類別分組到另一個類別範圍。您不能在其他地方使用巢狀類別。
  • 帶來可讀性和可維護性:類別的巢狀提供了更好的程式碼可讀性,並且更容易維護,因為它不會影響其他類別。
  • 減少程式碼:使用巢狀類別可以減少程式碼行數,從而實現最佳化。
  • 增加封裝性: 在巢狀類別中,內部類別可以存取其封閉外部類別的成員。同時,外部類別不能直接存取內部類別成員。此外,內部類別對外部程式不可見或不可存取。

Java 中嵌套類別的範例

下面給出了 Java 中巢狀類別的範例:

範例#1

在這個例子中,你可以透過引用外部類別來觀察內部類別的實例化。

代碼:

// Outer class which contains nested class
class Engine{
static double fuel = 20.0;
//static nested class
static class Ignition{
void showFuelSpend() {
System.out.println("Fuel Spend = " + fuel + " Ltrs");
}
}
}
//class uses nested class inside it
public class NestedClassExample{
public static void main(String[] args) {
//creating object of the nested class by referencing parent class
Engine.Ignition engIgnitObj = new Engine.Ignition();
//calling method of the nested class
engIgnitObj.showFuelSpend();
}
<u>}</u>

輸出:

Java 中的巢狀類別

範例#2

在這個例子中,我們可以看到內部類別是如何實例化的。您將需要內部類別的實例來建立內部類別的實例。建立外部類別的實例後,就可以在其中建立嵌套類別的實例。

代碼:

//Outer class
class Volume{
double x, y, z;
Volume(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
// Nested inner class
class Measurement{
//method to calculate the total area
void totalArea(double i, double j) {
System.out.println("\nArea for the provided container is " + (i * j));
}
//method to calculate the total volume
void totalVolume(double i, double j, double k) {
System.out.println("\nVolume for the provided container is " + (i * j * k));
}
}
}
public class NestedClassCalcExample {
public static void main(String[] args) {
//passing here all the parameter to constructor
Volume volObj = new Volume(30.0, 25, 18.0);
Volume.Measurement volMeasureObj = volObj.new Measurement();
// calculating total area
volMeasureObj.totalArea(volObj.x, volObj.y);
// calculating total volume
volMeasureObj.totalVolume(volObj.x, volObj.y, volObj.z);
}
}

輸出:

Java 中的巢狀類別

範例#3

此範例示範如何在外部類別的實例中實例化巢狀類別物件。

代碼:

//outer class
class Electronic{
String circuitName,
String circuitType;
double circuitCost;
//constructor of outer class
Electronic(String name, String type, double cost) {
this.circuitName = name;
this.circuitType = type;
this.circuitCost = cost;
}
String getCircuitName() {
return this.circuitName;
}
//nested class
class Circuit{
String circuitType;
double circuitCost;
void setCircuitType() {
this.circuitType = "Transistor";
this.circuitCost = 430.0;
}
//get circuit type using this method
String getCircuitType(){
return this.circuitType;
}
//get circuit cost using this method
double getCircuitCost(){
return this.circuitCost;
}
}
}
public class Product{
public static void main(String[] args) {
Electronic elObj = new Electronic("Amplifier", "Integrated", 375.0);
Electronic.Circuit circuit = elObj.new Circuit();
//printing here the values before reset it
System.out.println("\nCircuit Name : " + elObj.circuitName);
System.out.println("\nCircuit Type : " + elObj.circuitType);
System.out.println("\nCircuit Cost : " + elObj.circuitCost);
//resetting some value
circuit.setCircuitType();
//printing here the values before reset it
System.out.println("\n\nCircuit Name : " + elObj.getCircuitName());
System.out.println("\nCircuit Type : " + circuit.getCircuitType());
System.out.println("\nCircuit Cost : " + circuit.getCircuitCost());
}
}

輸出:

Java 中的巢狀類別

結論

在上面的文章中,我們回顧了 Nested 類別在 java 中的重要性。利用類別的嵌套是一個很好的做法。上面的文章也介紹了Nested類別的可用性。

以上是Java 中的巢狀類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn