Stories

Detail Return Return

Java面向對象 - Stories Detail

一:面向對象(OOP)

1.定義
過程編程是關於編寫對數據執行操作的過程或函數,而面向對象編程是創建同時包含數據和函數的對象
2.優點
OOP 更快更容易執行
OOP 為程序提供了清晰的結構
OOP 有助於保持C#代碼"不重複自己",並使代碼更易於維護、修改和調試
OOP 使得用更少的代碼和更短的開發時間創建完全可重用的應用程序成為可能
3.對象和類
對象是類的實例,有狀態和行為
類是對象的模板,描述一類對象的行為和狀態
4.java中的對象和類
(1)軟件對象也有狀態和行為。軟件對象的狀態就是屬性,行為通過方法體現
在軟件開發中,方法操作對象內部狀態的改變,對象的相互調用也是通過方法來完成
(2)類類似於對象構造函數,或用於創建對象的"藍圖
5.構造函數
Java 中的構造函數是一種用於初始化對象的特殊方法。在創建類的對象時調用構造函數,它可用於設置對象屬性的初始值。構造函數名稱必須與類名匹配,並且不能有返回類型
6.構造方法
每個類都有構造方法。如果沒有顯式地為類定義構造方法,Java 編譯器將會為該類提供一個默認構造方法
在創建一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法
7.修飾符
(1)訪問修飾符 - 控制訪問級別
1>public 該類可由任何其他類訪問
2>private 代碼只能在聲明的類中訪問
3>default 該類只能由同一包中的類訪問
4>protexted 代碼可以在相同的包和子類中訪問
(2)非訪問修飾符 - 不控制訪問級別,但提供其他功能
1>final 該類不能被其他類繼承
2>abstract 該類不能用於創建對象
3>static 屬性和方法屬於類,而不是對象
8.創建對象
對象是根據類創建的。在Java中,使用關鍵字 new 來創建一個新的對象。創建對象需要以下三步:
(1)聲明:聲明一個對象,包括對象名稱和對象類型
(2)實例化:使用關鍵字 new 來創建一個對象
(3)初始化:使用 new 創建對象時,會調用構造方法初始化對象
9.繼承
Java 中可以將屬性和方法從一個類繼承到另一個類。我們將"繼承概念"分為兩類:
(1)子類 (Subclass) - 子,從另一個類繼承的類
(2)超類 (Superclass) - 父,被繼承的類
要從類繼承,請使用 extends關鍵字
例如:

class Vehicle {
protected String brand = "Ford";      
public void honk() {                   
    System.out.println("Tuut, tuut!");
  }
}

class Car extends Vehicle {
private String modelName = "Mustang";  
public static void main(String[] args) {
    Car myCar = new Car();
    myCar.honk();
    System.out.println(myCar.brand + " " + myCar.modelName);
    }
}

10.多態
(1)多態是同一個行為具有多個不同表現形式或形態的能力。繼承允許我們從另一個類繼承屬性和方法。多態性使用這些方法來執行不同的任務,這允許我們以不同的方式執行單個操作
實例:

class Animal {
public void animalSound() {
    System.out.println("The animal makes a sound");
  }
}
class Pig extends Animal {
public void animalSound() {
    System.out.println("The pig says: wee wee");
  }
}
class Dog extends Animal {
public void animalSound() {
    System.out.println("The dog says: bow wow");
  }
}

(2)多態的三個必要條件
1>繼承;
2>重寫;
3>父類引用指向子類:Parent p = new Child();
(3)向上轉型
子類引用的對象轉換為父類類型稱為向上轉型。通俗地説就是是將子類對象轉為父類對象。此處父類對象可以是接口
(4)向下轉型
向下轉型是把父類對象轉為子類對象
11.封裝
在面向對象程式設計方法中,封裝是指一種將抽象性函式接口的實現細節部分包裝、隱藏起來的方法
封裝優點:
1> 良好的封裝能夠減少耦合
2> 類內部的結構可以自由修改
3> 可以對成員變量進行更精確的控制
4> 隱藏信息,實現細節,提高數據的安全性
12.包
為了更好地組織類,Java 提供了包機制,用於區別類名的命名空間
分類:
(1)內置包(來自Java API的包)
要使用庫中的類或包,需要使用 import 關鍵字
語法;

import package.name.Class;   // 導入 single 類
import package.name.*;   // 導入整個包

(2)用户定義的包(創建自己的包)
要創建包,請使用 package 關鍵字
實例:

package mypack;
class MyPackageClass {
    public static void main(String[] args) {
        System.out.println("This is my package!");
  }
}

13.import關鍵字
在Java中,import關鍵字用於導入其他類或包中定義的類型,以便在當前源文件中使用這些類型
import關鍵字用於引入其他包中的類、接口或靜態成員,它允許你在代碼中直接使用其他包中的類,而不需要完整地指定類的包名
import語句位於package語句之後
14.接口
interface 接口是一個完全"抽象類",用於將相關方法與空實體分組;要訪問接口方法
接口必須由另一個具有 implements 關鍵字的類"實現"
接口方法的主體由"implement"類提供
實例

// 接口
interface Animal {
    public void animalSound(); // 接口方法(沒有主體)
    public void sleep(); // 接口方法(沒有主體)
}
class Pig implements Animal {
    public void animalSound() {
// 這裏提供了 animalSound() 的主體
        System.out.println("The pig says: wee wee");
    }
    public void sleep() {
       System.out.println("Zzz");
    }
}

class MyMainClass {
      public static void main(String[] args) {
          Pig myPig = new Pig();  // 創建 Pig 對象
          myPig.animalSound();
          myPig.sleep();
      }
 }

二:問題聚合

1.java中可不可以多重繼承?為什麼?
(1)不可以多重繼承;Java只能繼承一個類,因為Java是面嚮對象語言,一個類可繼承的屬性不應該來自多個類,繼承是類與類的關係,在Java中是對本身更高層次的抽象,而不是更多層次的抽象。
(2)不支持多重繼承主要是避免在多重繼承的場景下,當兩個父類有相同的方法或屬性時,子類如何確定使用哪一個父類的方法或屬性的這種問題。Java可以通過實現多個接口來實現類的多重繼承效果。接口是一種抽象類型,定義一組方法,但沒有實現這些方法;一個類可以實現多個接口,併為其實現接口中定義的方法,通過這種方式,Java實現了類似於多重繼承的功能。
2.子類在繼承父類的同時,能不能出現同名不同類型的參數
子類在繼承父類的同時,可以出現同名不同類型的參數。這是因為Java支持方法的重載(Overloading),即允許同一個方法名在不同情況下具有不同的參數列表。當子類定義了一個與父類中已有方法名相同的方法時,編譯器會根據參數列表的差異來判斷調用哪個方法。
例如,假設有一個父類Animal和一個子類Dog,Animal類中有一個名為"makeSound"的方法,而Dog類中也定義了一個名為"makeSound"的方法,但參數列表不同。在這種情況下,子類中的"makeSound"方法會覆蓋父類中的同名方法。
3.在3.4中的實例,main方法中能不能創建對象:Dog d=(Dog) a;將a變量轉換成Dog對象?
在給定的代碼中,main方法中確實可以創建對象並進行類型轉換。但是,根據代碼的邏輯和結構,將a變量轉換為Dog對象並不是一個合理的操作,因為a是一個Animal類型的引用,它可能指向Cat或Dog的實例。嘗試將a轉換為 Dog類型並賦值給d會導致編譯時錯誤,因為類型不匹配。如果你想將a轉換為Dog類型,你需要確保a確實指向一個Dog類型的實例。在給定的代碼中,a被初始化為一個Cat類型的實例,因此將其轉換為Dog類型是不正確的。
4.包名中的類能不能放在與包路徑不同的文件路徑中?
在Java中,包名和文件路徑是相關聯的。按照Java的規範,包名應該與文件系統路徑保持一致。這意味着,如果你有一個包名com.example,那麼該包下的所有類文件應該位於一個名為com.example的目錄下。
5.面向對象特徵主要包括以下四個方面:
(1)抽象:抽象是將一類對象的共同特徵總結出來構造類的過程,包括數據抽象和行為抽象兩方面。抽象只關注對象有哪些屬性和行為,並不關注這些行為的細節是什麼。
(2)繼承:子類繼承父類的特徵和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
(3)封裝:封裝是指將客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或對象操作,對不可信的進行隱藏。封裝最主要的功能在於能修改自己的實現代碼,而不用修改那些調用我們代碼的程序片段。適當的封裝可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。
(4)多態:多態是指允許不同類的對象對同一消息做出相應,多態包括參數化多態和包含多態。

user avatar duoqingdemianbao Avatar jiarenxia Avatar java_3y Avatar
Favorites 3 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.