มันเป็นโวหารมากกว่าปัญหาโดยตรง มันแสดงให้เห็นว่าคุณคิดไม่ถูกว่าจะเกิดอะไรขึ้นกับชั้นเรียน
คิดถึงความstatic
หมาย:
ตัวแปรนี้มีอยู่ในระดับชั้นมันไม่ได้อยู่แยกต่างหากสำหรับแต่ละอินสแตนซ์และก็ไม่ได้มีความเป็นอยู่ที่เป็นอิสระในการเรียนซึ่งขยายฉัน
คิดถึงความprotected
หมาย:
ตัวแปรนี้จะเห็นได้จากชั้นนี้ชั้นเรียนในแพคเกจเดียวกันและการเรียนซึ่งขยายฉัน
ทั้งสองความหมายไม่ได้เป็นเอกสิทธิ์เฉพาะของกันและกัน แต่ค่อนข้างใกล้เคียงกัน
กรณีเดียวที่ฉันสามารถเห็นได้ว่าคุณสามารถใช้ทั้งสองร่วมกันได้ที่ไหนก็คือถ้าคุณมีคลาสนามธรรมที่ออกแบบมาให้ขยายและคลาสขยายสามารถแก้ไขพฤติกรรมโดยใช้ค่าคงที่ที่กำหนดไว้ในต้นฉบับ การจัดเรียงแบบนั้นมักจะยุ่งเหยิงมากและบ่งบอกถึงความอ่อนแอในการออกแบบชั้นเรียน
ในกรณีส่วนใหญ่จะเป็นการดีกว่าที่จะมีค่าคงที่เป็นสาธารณะเนื่องจากจะทำให้ทุกอย่างสะอาดขึ้นและช่วยให้ผู้คนย่อยมีความยืดหยุ่นมากขึ้น ค่อนข้างแตกต่างจากสิ่งอื่น ๆ ในหลาย ๆ กรณีองค์ประกอบเป็นที่นิยมในการถ่ายทอดทางพันธุกรรมในขณะที่คลาสนามธรรมบังคับให้สืบทอด
หากต้องการดูตัวอย่างหนึ่งว่าสิ่งนี้สามารถทำลายสิ่งต่าง ๆ ได้อย่างไรและเพื่อแสดงให้เห็นว่าฉันหมายถึงอะไรโดยตัวแปรที่ไม่มีการดำรงอยู่อย่างอิสระให้ลองใช้โค้ดตัวอย่างนี้:
public class Program {
public static void main (String[] args) throws java.lang.Exception {
System.out.println(new Test2().getTest());
Test.test = "changed";
System.out.println(new Test2().getTest());
}
}
abstract class Test {
protected static String test = "test";
}
class Test2 extends Test {
public String getTest() {
return test;
}
}
คุณจะเห็นผลลัพธ์:
test
changed
ลองเองได้ที่: https://ideone.com/KM8u8O
ชั้นTest2
สามารถเข้าถึงสมาชิกคงtest
จากTest
โดยไม่จำเป็นต้องมีคุณสมบัติชื่อ - แต่ก็ไม่ได้รับมรดกหรือได้รับสำเนาของตัวเอง มันกำลังมองไปที่วัตถุเดียวกันในหน่วยความจำ
final
มีอะไรผิดปกติกับข้อมูลแบบคงที่ได้รับการคุ้มครองตราบใดที่มันเป็น เขตข้อมูลคงที่ที่ไม่เปลี่ยนแปลงที่ใช้ร่วมกันระหว่างชั้นเรียนเป็นสาเหตุของความกังวลอย่างแน่นอน หลายคลาสที่อัปเดตฟิลด์แบบคงที่ไม่น่าจะเชื่อถือได้หรือง่ายต่อการติดตามโดยเฉพาะอย่างยิ่งเนื่องจากการมีฟิลด์หรือวิธีการป้องกันใด ๆ บ่งบอกว่าคลาสนั้นมีจุดมุ่งหมายเพื่อขยายคลาสโดยคลาสในแพ็กเกจอื่นอาจเป็นคลาสที่ไม่อยู่ภายใต้การควบคุมของ ผู้เขียนชั้นเรียนที่มีเขตข้อมูลที่มีการป้องกัน