xem xét:Biến 'this' trong Java thực sự được đặt thành đối tượng hiện tại như thế nào?
class TestParent{
public int i = 100;
public void printName(){
System.err.println(this); //{[email protected]} according to the Debugger.
System.err.println(this.i); //this.i is 100.
}
}
class TestChild extends TestParent{
public int i = 200;
}
public class ThisTest {
public static void main(String[] args) {
new TestChild().printName();
}
}
Tôi biết rằng câu hỏi tương tự đã được yêu cầu, nhưng tôi không thể có được một sự hiểu biết vững chắc của 'này' biến trong Java.
Hãy để tôi giải thích cách tôi hiểu kết quả của hình ảnh ở trên.
Kể từ đó là một đối tượng
new TestChild()
đó là cách gọi phương thứcprintName()
, cácthis
biến trong dòng 6 được thiết lập để một đối tượngTestChild
- {TestChild @ 428} theo Debugger. Tuy nhiên, vì Java không có trường ảo - tôi không hoàn toàn chắc chắn điều này có nghĩa là gì, nhưng tôi hiểu khái niệm đó là ngược lại với các phương thức Java, hỗ trợ Đa hình -this.i
được đặt thành 100 trong sốTestParent
tại thời gian biên dịch.Vì vậy, không có vấn đề gì
this
,this.i
trong một phương phápTestParent
sẽ luôn luôn lài
biến trong lớpTestParent
.
Tôi không chắc rằng sự hiểu biết của tôi là chính xác vì vậy hãy sửa tôi nếu tôi sai.
Và cũng có thể, câu hỏi chính của tôi là,
Làm thế nào là this
biến các thiết lập để các đối tượng hiện tại mà đang gọi phương pháp này? Làm thế nào nó thực sự được thực hiện?
Khi bạn làm, cố gắng thêm một 'toString() 'phương pháp (http://www.javapractices.com/topic/TopicAction.do?Id=55) cho' TestParent 'và xem những gì' System.out.println (điều này); sản lượng.' – c0der
IMO' this' đại diện cho lớp hiện tại vì vậy nếu bạn đang ràng buộc bất cứ điều gì với 'this', nghĩa là bạn đang ràng buộc với' class' hiện tại và cho rằng bạn cần 'variable/instance/member/method ...' của lớp hiện tại. – emotionlessbananas
Kevin Park, sự hiểu biết của bạn trong các mục từ 1. đến 3. là chính xác. @AsteriskNinja, 'this' đề cập đến một đối tượng, không phải là một lớp (trong một số trường hợp sự khác biệt là không quan trọng, trong những người khác nó là rất quan trọng). –