Hiding Method And Overriding Method In Java

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Hiding Method And Overriding Method In Java as PDF for free.

More details

  • Words: 722
  • Pages: 2
Hoàng Trần Huy – [email protected] –Dịch bừa class Foo { public static void classMethod() { System.out.println("classMethod() in Foo"); } public void instanceMethod() { System.out.println("instanceMethod() in Foo"); } } class Bar extends Foo { public static void classMethod() { System.out.println("classMethod() in Bar"); } public void instanceMethod() { System.out.println("instanceMethod() in Bar"); } } class Test { public static void main(String[] args) { Foo f = new Bar(); f.instanceMethod(); f.classMethod(); } }

Tại sao chúng ta lại nhận instanceMethod từ Bar, nhưng ClassMethod lại Foo? Chúng ta không sử dụng cùng đối tượng f để truy cập đến cả hay sao? Vâng, chúng ta làm điều đó nhưng trong khi một là overriding và cái còn lại là hiding, chúng ta có thể thấy sự khác biệt này Khi instanceMethod() là một phương thức đối tượng, Trong đó Bar override phương thức từ Foo, thời điểm Run Time thì JVM sử dụng lớp của đối tượng f để xác định phương thức nào được chạy. Mặc dù f được khai báo là một Foo, nhưng đối tượng chúng ta đã tạo là một new Bar(). do vậy tại runtime, JVM thấy rằng f là một đối tượng Bar, và bởi vậy nó gọi phương thức InstanceMethod() ở Bar thay vì phương thức ở Foo. Điều này lý giải cách Java làm việc với một phương thức đối tượng Vói classMethod() . nó là một phương thức lớp, trình biên dịch và JVM không cần thiết phải là một đối tượng để gọi đến phương thức. Và ngay cả nếu cung cấp một phương thức ( chúng ta đã làm đấy – đối tượng f, JVM sẽ không nhìn đến nó. Trình biên dịch sẽ chỉ nhìn vào kiểu được khai báo của tham chiếu, và sử dụng kiểu được khai báo để xác định tại compile time, phương thức nào sẽ được gọi). Do f được khai báo là kiểu Foo, trình biên dịch nhìn vàp f.classMethod() và xác định nó là Foo.classMethod(). Không quan tâm đối tượng tham chiếu tới bởi f là một Bar – đối với phương thức static, trình biên dịch chỉ sử dụng kiểu được khai báo của tham chiếu. Điều này là lý do chúng ta nói phương thức static không có đa hình. Bởi vì phương thức đối tượng và phương thức lớp có sự khác nhau quan trọng này trong thuộc tính, chúng ta sử dụng các thuật ngữ khác nhau- “overriding ” cho phương thức đối tượngvà “Hiding” cho phương thức lớp- để phân biệt giữa hai truờng hợp. và khi bạn nói bạn không thể override một phuơng thức điều đó có nghĩa là ngay cả nếu bạn viết

Hoàng Trần Huy – [email protected] –Dịch bừa code mà nhìn trong giống nó đang override phương thức static . Nó sẽ không hành động giống một phương thức overridden Cách truy cập phương thức static bằng đối tượng Trong Java cho phép code như thế này f.classMethod(); Khi đó f là một đối tượng của một số lớp nào đó, và classMethod() là một phương thức lớp (ý nói , một phương thức static) của lớp đó. Điều này hoàn toàn hợp lệ, nhưng đó là một suy nghĩ quá tồi bởi vì nó gây ra sự không rõ ràng. Đối tượng f ở đây không quan trọng. Chỉ để ý đến kiều được khai báo của f. Nghĩa là f được khai báo trở thành lớp nào. Vì classMethod() là static, lớp của f (được xác định bởi trình biên dịch tại compile time) là tất cả mà chúng ta cần. Thay vì viết f.classMethod(); Tốt hơn chúng ta nên viết Foo.classMethod(); Hoặc Bar.classMethod(); Theo cách đó, nó chỉ ra bản chất phương thức lớp nào bạn muốn gọi, nó cũng chỉ ra rõ ràng rằng phương thức bạn đang gọi thức sự là một phương thức lớp. Đôi khi bạn sẽ nhìn thấy những thông điệp lỗi từ trình biên dịch nói về các phương thức tỉnh. Nhìn bên ngoài, bất kỳ ai viết các thông điệp cụ thể này chưa từng đọc ngôn ngữ java và không biết sự khác nhau giữa overriding và hiding. Bởi vậy có sử dụng các thuật ngữ lung tung. Ko phải vậy, ngôn ngữ java cực kỳ rõ ràng về sự khác nhau giữa overriding và hiding

Related Documents

Method
November 2019 62
Method
November 2019 65
Method
November 2019 56
Method
June 2020 29