public
- 成员变量和方法:子类可以无限制地访问父类中被
public
修饰的成员变量和方法。无论子类与父类是否在同一个包中,都能直接通过对象调用。例如:
class Parent {
public int publicVar;
public void publicMethod() {}
}
class Child extends Parent {
void accessPublic() {
publicVar = 10;
publicMethod();
}
}
protected
- 成员变量和方法:
- 同一包内:子类可以直接访问父类中被
protected
修饰的成员变量和方法,与 public
类似。例如:
package samePackage;
class Parent {
protected int protectedVar;
protected void protectedMethod() {}
}
class Child extends Parent {
void accessProtected() {
protectedVar = 20;
protectedMethod();
}
}
- **不同包内**:子类也可以访问父类中 `protected` 修饰的成员变量和方法,但只能通过继承的方式访问,不能通过父类对象访问。例如:
package differentPackage;
import samePackage.Parent;
class Child extends Parent {
void accessProtected() {
protectedVar = 30;
protectedMethod();
}
}
default(包访问权限,无关键字)
- 成员变量和方法:
- 同一包内:子类可以访问父类中具有包访问权限的成员变量和方法,就像访问
public
和 protected
的成员一样直接。例如:
package samePackage;
class Parent {
int defaultVar;
void defaultMethod() {}
}
class Child extends Parent {
void accessDefault() {
defaultVar = 40;
defaultMethod();
}
}
- **不同包内**:子类无法访问父类中具有包访问权限的成员变量和方法,即使是通过继承关系也不行。
private
- 成员变量和方法:无论子类与父类是否在同一个包中,子类都无法直接访问父类中被
private
修饰的成员变量和方法。例如:
class Parent {
private int privateVar;
private void privateMethod() {}
}
class Child extends Parent {
// 下面的代码会报错,无法访问private成员
// void accessPrivate() {
// privateVar = 50;
// privateMethod();
// }
}