lớp Parent
của tôi là:thừa kế, phương pháp chữ ký, phương pháp trọng và ném khoản
import java.io.IOException;
public class Parent {
int x = 0;
public int getX() throws IOException{
if(x<=0){
throw new IOException();
}
return x;
}
}
tôi extend
lớp này để viết một lớp con Child
:
public class Child1 extends Parent{
public int getX(){
return x+10;
}
}
Thông báo khi trọng các GetX Phương pháp trong lớp Child
, tôi đã xóa mệnh đề throws
khỏi định nghĩa phương thức .Làm như vậy kết quả trong một hành vi bất thường của trình biên dịch được mong đợi:
new Parent().getX() ;
không biên dịch mà không kèm theo nó trong khối try-catch
, như mong đợi.
new Child().getX() ;
biên dịch mà không kèm theo nó trong khối try-catch
.
Nhưng các dòng mã dưới đây cần khối try-catch.
Parent p = new Child();
p.getX();
Vì đây có thể được dự kiến tức là sử dụng một tài liệu tham khảo lớp cha để gọi một phương pháp trẻ trong thời gian chạy đa hình, tại sao các nhà thiết kế của Java đã không làm cho nó bắt buộc phải bao gồm ném khoản trong định nghĩa phương pháp trong khi ghi đè một phương thức lớp cha cụ thể? Tôi có nghĩa là nếu một phương thức lớp cha đã ném mệnh đề trong định nghĩa của nó, thì khi ghi đè nó thì phương thức ghi đè cũng nên bao gồm mệnh đề ném, phải không?
Trong câu cuối cùng của bạn, ý của bạn là ", sau đó khi ghi đè phương thức *** ghi đè (phương thức trong phân lớp) cũng phải bao gồm mệnh đề ném" ??? – Bhushan