2023.8 - java - package [包]

 

package 和 访问修饰符的访问关系:

 

同一类 同一包 子孙类(同包) 子孙类(不同包) 其他包
public Y Y Y Y Y
protected Y Y Y Y & N  注释:① N
default Y Y Y N N
private Y N N N N

①:

可以访问 继承自父类的 protected 方法

不可以访问 父类实例的 protected 方法

父类:

package com.example.package1;

public class ParentClass {
    protected void protectedMethod() {
        System.out.println("This is a protected method");
    }
}

子类:

package com.example.package2;

import com.example.package1.ParentClass;

public class ChildClass {
    void accessProtectedMethod() {
        ParentClass parentObj = new ParentClass();
        parentObj.protectedMethod(); // 无法访问基类实例的受保护方法
    }
}
在上述示例中,`ParentClass` 是基类,`ChildClass` 是子类,它们位于不同的包中。

在 `ChildClass` 中,我们尝试创建一个基类的实例 `parentObj`,并尝试调用基类的受保护方法 `protectedMethod()`。然而,编译器会报错,提示无法访问基类实例的受保护方法。

这是因为受保护方法只能在同一个包中的子类中访问,而不能通过基类的实例来访问。子类只能直接访问从基类继承而来的受保护方法。

复习类访问控制修饰符:

 外部类只能被 :public  abstract default  修饰;

内部类没有该限制,而且多个修饰符之间没有顺序要求。

访问控制修饰符:public protected default private

非访问控制修饰符: static abstract  final synchronized transient  volatile

你可能感兴趣的:(2023-java,java,开发语言)