- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi có đoạn mã sau trong hai tệp riêng biệt.
gói động vật;
lớp công cộng Ếch
{
ribbit void được bảo vệ ()
{
System.out.println("Trong lớp Ếch!");
}
}
gói khác;
nhập khẩu động vật.*;
lớp công khai Nòng nọc mở rộng Ếch
{
ribbit void được bảo vệ ()
{
System.out.println("Trong lớp Nòng Nọc!");
}
public static void main(String[] args)
{
Nòng nọc t = Nòng nọc mới();
t.ribbit();
Ếch f = Nòng nọc mới();
f.ribbit(); // Không biên dịch
}
}
được giao cho con nòng nọc
gõ đầu tiên con nòng nọc
Đối tượng dường như biên dịch tốt và ribbit()
Cuộc gọi sẽ dành cho con nòng nọc
của ribbit()
hoàn thành. Được tạo và gán cho Con ếch
Điều thứ hai được trích dẫn con nòng nọc
sự vật. Tuy nhiên, việc gọi ribbit()
sẽ gây ra lỗi biên dịch.
Tôi biết rằng nếu bạn tạo một đối tượng lớp con trong một lớp con và gán nó cho một tham chiếu siêu lớp bên ngoài gói lớp con và cố gắng gọi phương thức siêu lớp thì điều này là không được phép. Nhưng trong trường hợp này, vì con nòng nọc
Vì đối tượng, tính đa hình không nên thực hiện lệnh gọi "f" tham chiếu đối tượng con nòng nọc
của ribbit()
phương thức được gán cho nó? Tại sao điều này gây ra lỗi trình biên dịch và tại sao điều này không được phép?
câu trả lời hay nhất
Điều này liên quan đến việc truy cậpprotected
Quy định thành viên của lớp. Nhìn thấy phần nàyChi tiết từ Đặc tả ngôn ngữ Java, cụ thể:
Gọi C là lớp trong đó a
protected
thành viên được khai báo. Quyền truy cập chỉ được phép trong phần thân của lớp con S của C.Ngoài ra, nếu Id biểu thị một trường phiên bản hoặc phương thức phiên bản, sau đó:
Nếu quyền truy cập theo tên đủ điều kiện Q.Id hoặc biểu thức tham chiếu phương thức Q :: Id (§15.13), trong đó Q là Tên biểu thức, thì quyền truy cập được phép khi và chỉ khi loại biểu thức Q là S hoặc a lớp con của S.
Nếu quyền truy cập được thực hiện bằng biểu thức truy cập trường E.Id hoặc biểu thức gọi phương thức E.Id(...) hoặc biểu thức tham chiếu phương thức E :: Id, trong đó E là biểu thức Chính (§15.8), thì quyền truy cập được phép nếu và chỉ khi loại E là S hoặc một lớp con của S.
Vì thế ở Con ếch
Trong một lớp con của , nếu x
是一个 , bạn chỉ có thể truy cập x.ribbit()
Con ếch
lớp con của(x
không thể được khai báo là Con ếch
).
Hạn chế này tồn tại ở protected
thành viên, nếu không, giả sử Con ếch
Có một sự bảo vệ int
Lĩnh vực:
lớp công cộng Ếch {
được bảo vệ int a = 1;
...
}
Sau đó bạn có thể Con ếch
Xác định một lớp con của công cộng
方法:
lớp công khai TadPole mở rộng Frog {
public int RevealFieldValueOfParent(Ếch ếch) {
return ếch.a; // hãy tưởng tượng điều này ổn
}
}
Sau đó, bất kỳ lớp nào khác (không liên quan) đều có thể được truy cập bằng cách thêm Con ếch
Chuyển đến phương thức lớp con để truy cập vào trường:
lớp công khai SomeOtherClass {
public static void main(String[] args) {
Nòng nọc TadPole = TadPole mới();
Ếch Ếch = Ếch mới();
int tiếtValue = nòng nọc.revealFieldValueOfParent(ếch);
// in giá trị tiết lộ
}
}
biên tập:
Lỗi trình biên dịch này không liên quan gì đến tính đa hình. Tính đa hình liên quan đến loại thực tế của đối tượng là một khía cạnh thời gian chạy, trình biên dịch không cố gắng tính đến biến trong thời gian chạy f
Có thực sự trích dẫn hay không Con ếch
hoặccon nòng nọc
. Tất cả những gì trình biên dịch làm ở đây là thực thi protected
Quy tắc dành cho người sửa đổi, không có gì hơn.
编辑 2:
Theo ý kiến dưới đây,RevealFieldValueOfParent(Ếch ếch)
phương pháp thực sự sẽtrình diễn protected
giá trị nếu chúng ta thay đổi nó thànhRevealFieldValue(Ếch TadPole)
, nhưng bạn cũng có thể sử dụng các thành viên riêng tư để hiển thị các thủ thuật (tức là tương tự như các phương thức getter). Trách nhiệm của lớp con là phải biết nó đang làm gì.
Về việc Java sử dụng các tham chiếu đối tượng kiểu cha để truy cập các thành viên được bảo vệ trong các lớp con trong các gói khác nhau, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/31995632/
Tôi tìm trên mạng nhưng không tìm thấy bài viết phù hợp giải thích cách sử dụng dịch vụ WCF bằng javascript, đặc biệt là WebScriptEndpoint. Bất cứ ai có thể đưa ra bất kỳ hướng dẫn về điều này? Cảm ơn bạn vì câu trả lời tốt nhất Đây là một bài viết về.
Tôi đang viết một chương trình C sẽ chạy các lệnh Linux, ví dụ: cat /etc/passwd | grep list cut -c 1-5 Tôi không nhận được kết quả nào *ở đây cha mẹ đợi con đầu lòng (chi
Vì vậy, tôi đang cố gắng xử lý việc tải tệp lên và sau đó lưu trữ tệp đó vào cơ sở dữ liệu dưới dạng tệp nhị phân. Sau khi lưu trữ, tôi cố gắng phân phát tệp trên URL đã cho. Tôi dường như không thể tìm thấy một phương pháp hoạt động ở đây. Tôi cần sử dụng cơ sở dữ liệu vì tôi sử dụng Google Apps
Tôi đang cố gắng tạo một macro thêm công thức bên dưới vào một ô rồi kéo nó qua cột và sao chép cùng một công thức trong cột H. Tôi muốn nhập dữ liệu vào cột F và H bằng công thức Range("F1") .công thức = "=IF(ISE
Câu hỏi tương tự như câu hỏi này, nhưng tôi muốn sử dụng OperatorPrecedenceParser để phân tích một biểu thức bằng ứng dụng hàm trong FParsec. Đây là AST của tôi: type Expression =.
Tôi muốn thay đổi truy vấn này thành mã tùy thuộc vào vị trí chọn COUNT(giới tính) làm số lượng giới tính từ khách hàng bằng cách sử dụng phần tiếp theo và node.js
Tôi đang sử dụng GNU bash, phiên bản 5.0.3(1)-distro (x86_64-pc-linux-gnu) và tôi đang tự hỏi tại sao tôi lại gặp lỗi cú pháp với một câu lệnh gán đơn giản: #/bin/bash var1= /tmp
Đây là lý do tại sao mã của tôi không hoạt động trong IE. Mã của tôi hoạt động trong tất cả các trình duyệt. Không có gì. Nhưng khi tôi chạy dự án của mình trên IE thì nó phát hiện lỗi. Và cả lớp jquery của tôi cũng như lớp InsertadjacentHTMl đều không
Tôi đang cố gắng thay đổi HTML bên trong của thẻ. Tôi không có quyền truy cập vào biểu mẫu nên không thể chỉnh sửa HTML. Mã định danh duy nhất mà thẻ có là thuộc tính "for". Đây là cấu trúc của đầu vào và nhãn:
Tôi có một trang nơi tôi trả lại bài đăng của người dùng, tôi có thể đưa ra nhận xét ngay lập tức về những bài đăng này bằng cách sử dụng một số mã jquery, sau khi nhận xét mới được đăng, tôi chèn nhận xét mới bên dưới bài đăng cùng với nút xóa. Vấn đề là nút Xóa không hoạt động trên các phần tử mới được chèn vào,
Tôi có tệp "được phân cách bằng đường ống" với khoảng 20 cột. Tôi chỉ muốn băm cột đầu tiên bằng cách sử dụng sha1sum, một số giống như số tài khoản và trả về phần còn lại của các cột. Cách tốt nhất để làm điều này bằng awk hoặc sed là gì? tài khoản
Tôi cần chèn nội dung sau vào bảng của mình... Bảng người dùng của tôi có năm cột id, tên người dùng, mật khẩu, tên, mục nhập. (Tôi chưa gửi bất cứ thứ gì vào mục này, tôi sẽ làm điều đó sau bằng php) Nhưng vì lý do nào đó tôi vẫn gặp lỗi này: #1054 - U
Vì vậy, tôi đang cố gắng có một trường nhập để tôi có thể nhập bất kỳ ký tự nào, nhưng sau đó viết thường giá trị đã nhập, xóa mọi ký tự không phải chữ và số, để lại "." Ví dụ mình nhập: 70% trái đất là nước, -!*#$^ & 30% đất bị mất
Tôi đang cố gắng làm một việc mà tôi nghĩ là rất đơn giản nhưng vì lý do nào đó tôi lại không đạt được kết quả như mong muốn? Tôi mới làm quen với javascript nhưng có kinh nghiệm với java nên tôi tin rằng mình không sử dụng một số loại quy tắc chính xác. Đây là phương thức lấy giá trị đầu vào, kiểm tra lựa chọn
Tôi muốn tải dữ liệu từ cơ sở dữ liệu mysql bằng Angularjs. Đây là cách ứng dụng hoạt động; người dùng đăng nhập và tên người dùng của họ được lưu trữ trong cookie. Tên người dùng này được hiển thị trên trang chủ. Tôi muốn nhận giá trị này và chuyển nó qua Angularjs
Tôi đang sử dụng autoLayout và tôi muốn đặt nhãn UIlabel trên UITableViewCell, nhãn này phải luôn ở bên phải và chính giữa phía bên phải của ô. Đây là điều tôi đang cố gắng đạt được nên ở đây bạn có thể thấy điều tôi đang nói đến
Tôi cần truy vấn tương đương với elaticsearch với MySql. Truy vấn sql của tôi: CHỌN DISTINCT t.product_id NHƯ id TỪ tbl_sup_price t
Tôi đang triển khai mã để sử dụng JSON. thiết lập func() { if let FlickrURL = NSURL(string: "https://api.flickr.com/
Tôi đã thử khai báo một biến bằng vòng lặp for và sau đó kiểm tra xem cols và rols có giống nhau không. Nếu có, nó sẽ chạy hàm đệ quy. Tuy nhiên, tôi gặp sự cố khi thực hiện thao tác trong javascript. Có ai có thể giúp được không? Bây giờ, khi so sánh col.1 và
Tôi đã đưa ra một ví dụ ngắn gọn về vấn đề tôi đang giải quyết. Mã HTML: 1 2 3 Mã CSS: .BB a:hover{ color: #000 } .BB > li:after {
Tôi là một lập trình viên xuất sắc, rất giỏi!