Groovy-traits
提供:Dev Guides
グルーヴィー-特性
特性は、許可する言語の構造的な構成です-
- 行動の構成。
- インターフェイスのランタイム実装。
- 静的型チェック/コンパイルとの互換性
これらは、デフォルトの実装と状態の両方を保持するインターフェースと見なすことができます。 特性は、traitキーワードを使用して定義されます。
特性の例を以下に示します-
trait Marks {
void DisplayMarks() {
println("Display Marks");
}
}
次に、implementキーワードを使用して、インターフェイスと同様の方法で特性を実装できます。
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;
}
インターフェースの実装
特性はインターフェースを実装できます。その場合、インターフェースはimplementsキーワードを使用して宣言されます。
インターフェースを実装する特性の例を以下に示します。 次の例では、次の重要な点に注意することができます。
- インターフェイスTotalは、メソッドDisplayTotalで定義されます。
- 特性マークはTotalインターフェースを実装するため、DisplayTotalメソッドの実装を提供する必要があります。
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
プロパティ
特性はプロパティを定義できます。 プロパティを持つ特性の例を以下に示します。
次の例では、整数型の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
行動の構成
特性を使用して、制御された方法で複数の継承を実装し、ダイヤモンドの問題を回避できます。 次のコード例では、 Marks と Total の2つの特性を定義しています。 Studentクラスは両方の特性を実装します。 学生クラスは両方の特性を拡張するため、 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
}
上記のプログラムの出力は次のようになります-
Total
Marks1
特性の拡張
特性は別の特性を拡張する場合があり、その場合は extends キーワードを使用する必要があります。 次のコード例では、MarksトレイトでTotalトレイトを拡張しています。
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