2010-08-17 29 views

Trả lời

20

child.abóng (hoặc ẩn) parent.a.

Java hợp pháp, nhưng nên tránh. Tôi mong đợi IDE của bạn có một tùy chọn để cung cấp cho bạn một cảnh báo về điều này.

Lưu ý, tuy nhiên, đây chỉ là vấn đề vì bạn đã tiếp xúc với một biến số cho mọi người. Nếu bạn đảm bảo rằng tất cả các biến của bạn là riêng tư để bắt đầu (tách API của các phương thức khỏi việc triển khai các trường) thì không quan trọng nếu cả cha lẫn mẹ đều có cùng tên trường - con sẽ không có thể xem các trường của cha mẹ. Nó có thể gây nhầm lẫn nếu bạn di chuyển một phương thức từ đứa trẻ sang cha mẹ, và nó thường không tuyệt vời cho khả năng đọc, nhưng nó tốt hơn so với tình hình ẩn.

4

Một chút giống như kết hôn với người anh em họ của bạn; Pháp lý, nhưng không được thông báo.

Nó có thể dẫn đến tất cả các loại hành vi khó hiểu, vì khai báo lớp con ẩn khai báo lớp cha.

+0

man rợ ......... – Andrew

9

Được gọi là bóng tối và có thể gây ra sự cố cho người phát triển.

Trong trường hợp của bạn:

Child child = new Child(); 
child.a = 1; 
System.out.println(child.a); 
System.out.println(((Parent)child).a); 

sẽ in

1 
0 
0

Sẽ không có bất kỳ lỗi biên dịch hoặc lỗi thời gian chạy.

public class Parent { 
private String name; 
private int age; 
} 

public class Child extends Parent { 
String parent; 
public int age; 
} 

Ở đây bạn sẽ có thể truy cập child.age từ lớp chính ... Đó là lợi ích duy nhất mà bạn có thể nhận được bằng cách biến công cộng cho lớp có nguồn gốc

Các vấn đề liên quan