public
:
- 父类的
public
属性和方法在子类中可以直接访问和使用class Parent { public String name = "Parent"; public void displayName() { System.out.println("Name: " + name); } } class Child extends Parent { public void show() { System.out.println("Accessing parent's name: " + name); displayName(); } } public class Test { public static void main(String[] args) { Child child = new Child(); child.show(); } }
输出:
Accessing parent's name: Parent Name: Parent
protected
:和public一样
- 父类的
protected
属性和方法在子类中也可以直接访问和使用,并且可以在同一个包中的其他类中访问。
class Parent {
protected String name = "Parent";
protected void displayName() {
System.out.println("Name: " + name);
}
}
class Child extends Parent {
public void show() {
System.out.println("Accessing parent's name: " + name);
displayName();
}
}
public class Test {
public static void main(String[] args) {
Child child = new Child();
child.show();
}
}
输出:
Accessing parent's name: Parent
Name: Parent
default
(无修饰符):
- 父类的
default
属性和方法(无修饰符)在子类中可以访问,但只能在同一个包中访问,不能跨包访问。
private
:
- 父类的
private
属性和方法不能在子类中直接访问。它们只能在父类内部使用。如果需要在子类中访问或使用这些属性和方法,可以通过提供public
或protected
的访问方法(如getter和setter)来实现。class Parent { private String name = "Parent"; private void displayName() { System.out.println("Name: " + name); } protected String getName() { return name; }// protected void callDisplayName() { displayName(); }// } class Child extends Parent { public void show() { System.out.println("Accessing parent's name: " + getName()); callDisplayName();//不能直接调用private方法和属性,要间接访问。 } } public class Test { public static void main(String[] args) { Child child = new Child(); child.show(); } }
总结
public
和protected
的属性和方法可以在子类中直接访问和使用。default
(无修饰符)的属性和方法可以在子类中访问,但只能在同一个包中访问。private
的属性和方法不能在子类中直接访问,必须通过父类的public
或protected
方法间接访问。