特质(Traits)
优质
小牛编辑
127浏览
2023-12-01
特征是语言的结构构造,允许 -
- Composition of behaviors.
- 接口的运行时实现。
- 与静态类型检查/编译的兼容性
它们可以被视为承载默认实现和状态的接口。 使用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;
}
实现接口
Traits可以实现接口,在这种情况下,接口是使用implements关键字声明的。
下面给出了实现接口的特征的示例。 在以下示例中,可以注意以下关键点。
使用DisplayTotal方法定义接口Total。
特征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
属性 Properties
特征可以定义属性。 下面给出了具有财产的特征的示例。
在以下示例中,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