2014-04-20 13 views
7

Tôi đã thực hiện một dự án trong Greenfoot và tôi đã tạo một lớp số ảo. Trong dự án của tôi, tôi thấy cần thêm (hoặc trừ, hoặc bất kỳ thứ gì) hai vật tưởng tượng lại với nhau, có cách nào để thêm hai đối tượng như thế không? Vì vậy, đây là cách nó sẽ nhìn trong một thế giới hoàn hảo:Java: thêm hai đối tượng

Imaginary i1 = new Imaginary(1.7,3.14); 
    Imaginary i2 = new Imaginary(5.3,9.1); 
    //the class Imaginary has parameters (double real, double imaginary) 
    Imaginary i3 = i1+i2; 

Điều đó có thể?

+0

Tuy nhiên, trong Java không có điều gì như quá tải toán tử. Nó sẽ phải được viết tương tự như 'i3 = i1.add (i2)' (trong đó 'add' là một phương thức thực hiện logic thích hợp và tạo đối tượng mới). – user2864740

+0

Đây là một câu hỏi rất hợp lệ, tôi không hiểu các downvotes. –

Trả lời

3

Java có không quá tải nhà điều hành.

Ví dụ: BigDecimal sẽ phổ biến hơn nhiều nếu bạn có thể viết a + b thay vì a.add(b).

Cách 1.

Imaginary i3 = i1.add(i2); 

Phương pháp:

public static Imaginary add(Imaginary i2) 
{ 
    return new Imaginary(real + i2.real, imaginary + i2.imaginary); 
} 

Way 2.

Imaginary i3 = add(i1, i2) 

Phương pháp:

public static Imaginary add(Imaginary i1, Imaginary i2) 
{ 
    return new Imaginary(i1.real + i2.real, i1.imaginary + i2.imaginary); 
} 

điều hành quá tải sẽ chắc chắn làm thiết kế phức tạp hơn mà không có nó, và nó có thể dẫn tới biên dịch phức tạp hơn hoặc chậm JVM.

+0

Xin chào, cảm ơn rất nhiều, cả hai phương pháp đều hữu ích. – Pavel

+0

Java thực sự _does_ có quá tải toán tử (ví dụ toán tử '+' cho lớp String), do đó, rõ ràng là thiết kế/hiệu suất trình biên dịch đã không nhập vào nó. Nếu bộ nhớ phục vụ, các nhà phát triển đã chọn không cho phép quá tải toán tử cho _user-designed_ _classes_ bởi vì họ cảm thấy rằng nó giảm khả năng đọc và rõ ràng của chương trình. – ApproachingDarknessFish

5

Hãy thử Như thế này.

Imaginary i3 =new Imaginary(i1.real+i2.real,i1.imaginary+i2.imaginary); 

Nếu bạn muốn thêm Object bạn có thể tạo phương pháp để thêm vào.

public static Imaginary add(Imaginary i1,Imaginary i2) 
{ 
return new Imaginary(i1.real+i2.real,i1.imaginary+i2.imaginary); 
} 

Và tạo Object từ này

Imaginary i3 =add(i1,i2); 
8

Những gì bạn đang mô tả được gọi là "điều hành quá tải" và nó không thể được thực hiện trong Java (ít nhất là bởi các lập trình viên như bạn và tôi, những nhà phát triển có miễn phí trị vì để làm điều này và đã làm như vậy với lớp String). Thay vào đó, bạn có thể tạo một phương pháp add và gọi đó là:

Imaginary i3 = i1.add(i2); 
3

Có thể trong C++, nhưng không phải trong Java, định nghĩa một hàm addImaginary(Imaginary, Imaginary) mà sẽ bổ sung thêm hai Imaginarys và lưu trữ chúng trong các đối tượng sẽ được gọi là phương pháp.

Nó sẽ giống như:

i3.addImaginary(i1, i2) 

Nhưng đó là tùy thuộc vào bạn như thế nào bạn xác định chức năng, nó cũng có thể được thực hiện như:

i3=i1.add(i2); 
3

Java doesn't support user-defined operator overloading. Nhưng bạn có thể làm cho một phương pháp trong của bạn Imaginary lớp học:

public static Imaginary add(Imaginary other) { 
    return new Imaginary(real + other.real, imaginary + other.imaginary); 
} 

vì vậy, bạn có thể gọi nó là:

Imaginary i3 = i1.add(i2); 
Các vấn đề liên quan