在Java中,protected關鍵字的使用範圍比較廣泛,它可以修飾類、變量、方法等,在繼承、封裝、多態等方面都有重要作用。本文將從多個方面對Java中protected關鍵字的用法進行詳細闡述。
一、 protected關鍵字的概述
protected關鍵字表示受保護的,它的訪問範圍介於public和private之間,只有在同一個包中或者子類中才能訪問。
protected String name = "Tom";
上述代碼定義了一個受保護的成員變量name,只有在同一個包中或者子類中才能訪問。
二、 protected關鍵字在繼承中的作用
在繼承中,子類可以繼承父類的protected成員變量和protected方法,也可以通過super關鍵字訪問父類的protected成員變量和protected方法。
class Animal {
protected String name;
protected void eat() {
System.out.println("Animal is eating...");
}
}
class Cat extends Animal {
public void sayName() {
System.out.println("My name is " + name);
}
public void eatFood() {
super.eat();
}
}
Cat cat = new Cat();
cat.name = "Jerry"; // 可以訪問繼承來的protected成員變量
cat.sayName(); // 輸出:My name is Jerry
cat.eatFood(); // 輸出:Animal is eating...
上述代碼定義了一個Animal類和Cat類,Cat類繼承了Animal類的protected成員變量和protected方法。同時,Cat類中也定義了自己的方法,通過super關鍵字可以訪問父類的protected方法。
三、 protected關鍵字在封裝中的作用
在封裝中,我們通常會使用private關鍵字來保護對象的狀態,防止外部的訪問和修改。但是有時候,我們可能需要讓某些類或子類可以訪問和修改這些狀態信息,這時就可以使用protected關鍵字。
class Person {
protected String name; // 可以被子類訪問和修改
private int age; // 只能在本類中訪問和修改
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void showAge() {
System.out.println("My age is " + age);
}
}
class Student extends Person {
public Student(String name, int age) {
super(name, age);
}
public void sayHello() {
System.out.println("Hello, my name is " + name);
}
}
Student stu = new Student("Tom", 18);
stu.name = "Jerry"; // 可以訪問父類的protected成員變量
stu.sayHello(); // 輸出:Hello, my name is Jerry
stu.showAge(); // 可以調用父類的public方法
上述代碼中,Person類中使用了private關鍵字來保護age成員變量,只能在本類中訪問和修改;而name成員變量則使用protected關鍵字,可以在子類中訪問和修改。Student類繼承了Person類並且可以訪問父類中的protected成員變量。
四、 protected關鍵字在多態中的作用
在多態中,子類的對象可以作為父類對象來使用。如果父類的成員變量或方法是protected,那麼子類對象也可以訪問和使用。
class Shape {
protected int width, height;
public Shape(int width, int height) {
this.width = width;
this.height = height;
}
protected void show() {
System.out.println("Width: " + width + ", Height: " + height);
}
}
class Rectangle extends Shape {
public Rectangle(int width, int height) {
super(width, height);
}
public void display() {
System.out.println("Rectangle is displaying...");
show(); // 子類可以訪問和使用父類的protected方法
}
}
Shape shape = new Rectangle(100, 200);
((Rectangle) shape).display(); // 子類對象可以作為父類對象來使用
上述代碼定義了一個Shape類和一個Rectangle類,Rectangle類繼承了Shape類並且重寫了父類的show()方法。由於Shape類中的成員變量和方法是protected,因此Rectangle類中也可以訪問和使用。
五、Conclusion
本文對Java中protected關鍵字的用法進行了詳細的闡述,介紹了protected關鍵字在繼承、封裝、多態等方面的作用。在實際編程中,我們需要根據具體情況來選擇合適的訪問修飾符,保證程序的安全性和可維護性。
原創文章,作者:WQJCI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/317136.html