Hãy nói rằng tôi có đoạn mã này:Inheritance: đối tượng tạo
class Animal {
int legs = 4;
int head = 1;
}
public class Dog extends Animal {
public static void main (String []args) {
Dog dog = new Dog();
}
}
Tôi nhận thức được super()
ngầm đặt trong dòng đầu tiên của các nhà xây dựng không args, vì vậy tôi biết rằng các nhà xây dựng Animal
sẽ được thực hiện và do đó biến thể hiện của Animal
sẽ được thiết lập.
Với mục đích này, tôi muốn hiểu nếu một khi các biến đó được khởi tạo bởi hàm tạo siêu (Animal
), biến mẫu đó sẽ được giữ trong đối tượng Động vật hoặc sao chép vào phân lớp (Dog
).
Trong trường hợp đầu tiên một đối tượng Animal
sẽ được khởi tạo ngầm bởi super();
và bất cứ khi nào dụ Dog
sẽ cần phải truy cập vào một trong những biến nó sẽ được thực hiện truy cập vào các biến lưu giữ trong trường hợp Animal
(tạo ra trên nền). Hoặc trường hợp thứ hai, nếu đối tượng Động vật sẽ được tạo tạm thời, tất cả biến cá thể (trong Animal
) được sao chép vào cá thể Dog
và sau đó xóa cá thể của Animal
tạm thời được tạo.
Cá nhân tôi nghĩ rằng ví dụ: đối tượng Dog
sẽ được liên kết trực tiếp với đối tượng Animal
được kết nối trực tiếp với đối tượng.
Có theo cách này không?
Bạn đang làm việc đó như thế nào? – bsiamionau
@zvzdhk Bởi vì đối tượng chính nó là một 'Dog'. Ngay cả trong hàm khởi tạo (và cũng trong hàm tạo 'super')' this' chỉ đối tượng hiện tại. Vì vậy, nó có thể trông lạ, nhưng nó khá đơn giản. – gaborsch
@GaborSch: Tôi nghĩ * zvzdhk có thể đã đề cập đến tốc độ phản hồi, thay vì đặt câu hỏi kỹ thuật. Tôi có thể sai, tất nhiên. –