Tôi tò mò muốn biết điều gì thực sự xảy ra đằng sau hậu trường khi bạn sử dụng super()
để gọi một hàm tạo của lớp siêu. Khi một đối tượng được khởi tạo từ lớp con, lớp con có kế thừa đối tượng lớp siêu không? hoặc nó hoạt động như thế nào?Điều gì đang xảy ra phía sau hậu trường khi bạn sử dụng siêu()
Đây là mã của tôi để tham khảo:
public class Bicycle {
//Declaring bicycles states
public int movSpeed = 0;
public int cadence = 0;
public int curGear = 0;
//Class constructor
public Bicycle(){
}
//Class constructor with params
public Bicycle(int movSpeed, int cadence, int curGear) {
this.movSpeed = movSpeed;
this.cadence = cadence;
this.curGear = curGear;
}
Subclass:
public class mountainBike extends Bicycle {
//Declare mountainBikes states
public int frontTravel = 0;
public int rearTravel = 0;
public int gearMult = 0;
//Class constructor
public mountainBike(){
}
//Class constructor with params
public mountainBike(int movSpeed, int cadence, int curGear, int frontTravel, int rearTravel,int gearMult){
super(movSpeed,cadence,curGear);
this.frontTravel = frontTravel;
this.rearTravel = rearTravel;
this.gearMult = gearMult;
}
Về mặt kỹ thuật 'mountainBike' của bạn (vui lòng sử dụng [UpperCamelCase] (https://en.wikipedia.org/wiki/CamelCase) cho lớp) là một 'Xe đạp', gọi' siêu (args ...) ' cho bạn biết rằng hàm tạo cụ thể được gọi. Nếu bạn không gọi 'super()' có hoặc không có args thì hàm khởi tạo mặc định sẽ được gọi. – Emz
Tôi cho rằng bạn khá mới đối với Java nên tôi cũng muốn chỉ ra [giá trị mặc định nguyên thủy] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html), không có lý do thực sự để đặt giá trị của 'frontTravel',' rearTravel' thành '0', vì điều đó được thực hiện tự động. – Emz
Kiểm tra _Head Java_ đầu tiên để tham khảo (chương 9, ["Vai trò của các nhà xây dựng siêu lớp trong cuộc sống của đối tượng"] (http://tinyurl.com/usingSuper)). – Eugene