2013-03-04 44 views
20

Tôi đang đọc qua một số mã. Trong hàm khởi tạo, nó có siêu() nhưng lớp thực hiện giao diện mà tất nhiên không có hàm tạo. Vì vậy mà siêu() nó được đề cập đến?super() trong hàm tạo

public class BoundingBox implements IBoundingVolume { 

public BoundingBox() { 
     super(); 
     mTransformedMin = new Number3D(); 
     mTransformedMax = new Number3D(); 
     mTmpMin = new Number3D(); 
     mTmpMax = new Number3D(); 
     mPoints = new Number3D[8]; 
     mTmp = new Number3D[8]; 
     mMin = new Number3D(); 
     mMax = new Number3D(); 
     for(int i=0; i<8; ++i) { 
      mPoints[i] = new Number3D(); 
      mTmp[i] = new Number3D(); 
     } 
} 


public interface IBoundingVolume { 
    public void calculateBounds(Geometry3D geometry); 
    public void drawBoundingVolume(Camera camera, float[] projMatrix, float[] vMatrix, float[] mMatrix); 
    public void transform(float[] matrix); 
    public boolean intersectsWith(IBoundingVolume boundingVolume); 
    public BaseObject3D getVisual(); 
} 
+1

Nó được gọi đến constructor của lớp cha. Trong trường hợp này - Object. – user

+3

Nó đề cập đến lớp Object. –

+0

Nó gọi java.lang.Object constructor tôi giả sử. –

Trả lời

34

super() dùng để mở rộng class (không phải giao diện được triển khai). Trong trường hợp này là Object

Vì vậy, nó sẽ gọi các nhà xây dựng trong Object (mà không có gì)

+1

Trong Java tất cả các lớp được bắt nguồn từ Object, trừ khi chúng được bắt nguồn từ một lớp khác. Do đó, super() là hàm tạo của lớp Object. –

+1

Thực ra * TẤT CẢ * Các lớp Java bắt nguồn từ Object. Nếu họ mở rộng một lớp khác, điều đó có nghĩa là họ có một hệ thống phân cấp lớn hơn. – cowls

+0

hmmm, tại sao bất cứ ai sẽ đề cập đến constructor của Object()? nếu tôi xóa dòng này với super() nó sẽ không có tác dụng gì không? – Nazerke

1

super gọi constructor của lớp mở rộng. Tất cả các lớp trong Java lấy từ Object. Ngoài ra, nếu tác giả của một lớp không tạo ra một hàm khởi tạo cho lớp, thì một hàm tạo mặc định được tạo ra mà không làm gì cả.

Trong trường hợp của bạn, super đang gọi hàm tạo mặc định là Object.

Nếu bạn muốn tìm hiểu thêm về Object, bạn có thể đọc mã nguồn của Object.javahere.

13

Siêu đang tham chiếu đến lớp mở rộng. Theo mặc định, nó là lớp Object. Constructor trong Object không làm gì cả. Nói cách khác, bạn có thể xóa dòng này vì nó không cần thiết.

hãy cũng lưu ý những gì Oracle đang nói về chủ đề này:

Nếu một constructor không gọi rõ ràng một constructor lớp cha, trình biên dịch Java sẽ tự động chèn một cuộc gọi đến các nhà xây dựng không tham số của lớp cha. Nếu lớp siêu không có hàm tạo không có đối số, bạn sẽ nhận được lỗi biên dịch. Object có một constructor như vậy, vì vậy nếu Object là superclass duy nhất, thì không có vấn đề gì cả.

Nguồn: http://docs.oracle.com/javase/tutorial/java/IandI/super.html

Các vấn đề liên quan