📅  最后修改于: 2020-11-04 06:45:47             🧑  作者: Mango
特质是该语言的结构性结构,可允许-
它们可以看作是既带有默认实现又带有状态的接口。使用trait关键字定义一个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 。我们的学生班兼顾了这两个特点。由于学生班级扩展了这两种特征,因此它可以访问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
特质可能会扩展另一个特征,在这种情况下,您必须使用extend关键字。在下面的代码示例中,我们使用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