Groovy - Chỉ số ẩn
Đặc điểm là một cấu trúc cấu trúc của ngôn ngữ cho phép -
- Thành phần của các hành vi.
- Thực thi thời gian chạy của các giao diện.
- Khả năng tương thích với kiểm tra / biên dịch kiểu tĩnh
Chúng có thể được coi là giao diện mang cả trạng thái và triển khai mặc định. Một đặc điểm được xác định bằng cách sử dụng từ khóa đặc điểm.
Dưới đây là một ví dụ về đặc điểm:
trait Marks {
void DisplayMarks() {
println("Display Marks");
}
}
Sau đó, người ta có thể sử dụng từ khóa triển khai để triển khai đặc điểm theo cách tương tự như các giao diện.
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;
}
Triển khai giao diện
Các đặc điểm có thể triển khai các giao diện, trong trường hợp đó, các giao diện được khai báo bằng cách sử dụng từ khóa triển khai.
Dưới đây là ví dụ về đặc điểm triển khai giao diện. Trong ví dụ sau đây, các điểm chính sau đây có thể được lưu ý.
Một giao diện Total được định nghĩa với phương thức DisplayTotal.
Đặc điểm Marks triển khai giao diện Total và do đó cần cung cấp triển khai cho phương thức 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;
}
Đầu ra của chương trình trên sẽ là:
Display Marks
Display Total
Tính chất
Một đặc điểm có thể xác định các thuộc tính. Dưới đây là một ví dụ về đặc điểm với thuộc tính.
Trong ví dụ sau, Marks1 của kiểu số nguyên là một thuộc tính.
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
}
}
Đầu ra của chương trình trên sẽ là:
10
Display Total
Thành phần của Hành vi
Các đặc điểm có thể được sử dụng để thực hiện đa kế thừa một cách có kiểm soát, tránh vấn đề kim cương. Trong ví dụ mã sau, chúng tôi đã xác định hai đặc điểm:Marks và Total. Lớp Học sinh của chúng tôi thực hiện cả hai đặc điểm. Vì lớp sinh viên mở rộng cả hai đặc điểm, nó có thể truy cập cả hai phương thức -DisplayMarks và 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
}
Đầu ra của chương trình trên sẽ là:
Total
Marks1
Mở rộng các đặc điểm
Các đặc điểm có thể mở rộng một đặc điểm khác, trong trường hợp đó bạn phải sử dụng extendstừ khóa. Trong ví dụ mã sau đây, chúng tôi đang mở rộng đặc điểm Tổng với đặc điểm Dấu.
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
}
Đầu ra của chương trình trên sẽ là:
Total