特征是语言的结构构造,允许 -
它们可以被看作是承载默认实现和状态的接口。使用trait关键字定义trait。
下面给出了一个特征的例子:
trait Marks { |
void DisplayMarks() { |
println("Display Marks"); |
} |
} |
Traits可以实现接口,在这种情况下,使用implements关键字声明接口。
下面给出了实现接口的特征的示例。在以下示例中,可以注意以下要点。
接口Total使用方法DisplayTotal定义。
特征Marks实现了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
特征可以定义属性。下面给出了具有属性的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
特征可以用于以受控的方式实现多重继承,避免钻石问题。在下面的代码示例中,我们定义了两个特征 - Marks和Total。我们的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 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