特征是語言的結構構造,允許 -
它們可以被看作是承載默認實現(xiàn)和狀態(tài)的接口。使用trait關鍵字定義 trait。
下面給出了一個特征的例子:
trait Marks { void DisplayMarks() { println("Display Marks"); } }
然后可以使用 implement 關鍵字以類似于接口的方式實現(xiàn) trait。
class Example { static void main(String[] args) { Student st = new Student(); st.StudentID = 1; st.Marks1 = 10; println(st.DisplayMarks()); } } trait Marks { void DisplayMarks() { println("Display Marks"); } } class Student implements Marks { int StudentID int Marks1; }
Traits 可以實現(xiàn)接口,在這種情況下,使用 interface 關鍵字聲明接口。
下面給出了實現(xiàn)接口的特征的示例。在以下示例中,可以注意以下要點。
接口 Total 使用方法 DisplayTotal 定義。
特征 Marks 實現(xiàn)了 Total 接口,因此需要為 DisplayTotal 方法提供一個實現(xiàn)。
class Example { static void main(String[] args) { Student st = new Student(); st.StudentID = 1; st.Marks1 = 10; println(st.DisplayMarks()); println(st.DisplayTotal()); } } interface Total { void DisplayTotal() } trait Marks implements Total { void DisplayMarks() { println("Display Marks"); } void DisplayTotal() { println("Display Total"); } } class Student implements Marks { int StudentID int Marks1; }
上述程序的輸出將是 -
Display Marks Display Total
特征可以定義屬性。下面給出了具有屬性的trait的示例。
在以下示例中,integer 類型的 Marks1 是一個屬性。
class Example { static void main(String[] args) { Student st = new Student(); st.StudentID = 1; println(st.DisplayMarks()); println(st.DisplayTotal()); } interface Total { void DisplayTotal() } trait Marks implements Total { int Marks1; void DisplayMarks() { this.Marks1 = 10; println(this.Marks1); } void DisplayTotal() { println("Display Total"); } } class Student implements Marks { int StudentID } }
上述程序的輸出將是 -
10 Display Total
特征可以用于以受控的方式實現(xiàn)多重繼承,避免鉆石問題。在下面的代碼示例中,我們定義了兩個特征 - Marks 和 Total。我們的 Student 類實現(xiàn)了兩個特征。由于學生類擴展了這兩個特征,它能夠訪問這兩種方法 - DisplayMarks 和 DisplayTotal。
class Example { static void main(String[] args) { Student st = new Student(); st.StudentID = 1; println(st.DisplayMarks()); println(st.DisplayTotal()); } } trait Marks { void DisplayMarks() { println("Marks1"); } } trait Total { void DisplayTotal() { println("Total"); } } class Student implements Marks,Total { int StudentID }
上述程序的輸出將是 -
Marks1
Total
特征可能擴展另一個特征,在這種情況下,必須使用extends關鍵字。在下面的代碼示例中,我們使用 Marks trait 擴展了 Total trait。
class Example { static void main(String[] args) { Student st = new Student(); st.StudentID = 1; println(st.DisplayMarks()); } } trait Marks { void DisplayMarks() { println("Marks1"); } } trait Total extends Marks { void DisplayMarks() { println("Total"); } } class Student implements Total { int StudentID }
上述程序的輸出將是 -
Total
更多建議: