Tôi có 2 loại sau đây:Việc gán đối tượng Java có nghĩa là gì?
class Animal {
public static void staticMethod(int i) {
System.out.println("Animal : static -- " + i);
}
public void instanceMethod(int i) {
System.out.println("Animal : instance -- " + i);
}
}
class Cat extends Animal {
public static void staticMethod(int i) {
System.out.println("Cat : static -- " + i);
}
public void instanceMethod(int i) {
System.out.println("Cat : instance -- " + i);
}
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.staticMethod(1); // Cat : static -- 1
myCat.instanceMethod(2); // Cat : instance -- 2
System.out.println("");
Animal myAnimal = myCat;
Animal.staticMethod(3); // Animal : static -- 3
myAnimal.staticMethod(4); // Animal : static -- 4 [ ? ]
System.out.println("");
myAnimal.instanceMethod(5); // Cat : instance -- 5
}
}
Và khi tôi chạy Cát, tôi có kết quả như sau:
Cat : static -- 1
Cat : instance -- 2
Animal : static -- 3
Animal : static -- 4
Cat : instance -- 5
tôi có thể hiểu 1,2,3 và 5, nhưng tại sao # 4 không phải là: "Mèo: tĩnh - 4"? Sự hiểu biết của tôi sẽ như sau:
myAnimal = myCat có nghĩa là "myAnimal" bây giờ giống y như "myCat", vì vậy bất kỳ nơi nào "myAnimal" sẽ xuất hiện, bạn có thể thay thế bằng "myCat" và nhận kết quả tương tự, bởi vì mọi thứ bên trong myAnimal giống như mọi thứ bên trong myCat, do đó "myAnimal.staticMethod (4)" phải giống như "myCat.staticMethod (4)" và đầu ra phải là: "Cat: static - 4", tương tự để "myCat.staticMethod (1)" ở trên.
Nhưng điều đó dường như không đúng, tại sao?
Đây là nhật thực cho tôi biết: 'Phương thức tĩnh staticMethod (int) từ loại Animal nên được truy cập theo cách tĩnh' vì nó là phương thức tĩnh, nó chỉ bị ràng buộc với bố mẹ khi bạn gọi obj của nó là 'Động vật'. –
thống kê được liên kết tại thời gian biên dịch. Đó là những gì ngăn cản họ bị lật đổ – njzk2
Một câu hỏi trùng lặp của nó được hỏi xung quanh nhiều lần – madz