继承权限的问题

权限修饰符(Y表示可以访问,N表示不可以访问)

成员修饰符 类自己 相同包 不同包的子类 任意类
public(公有的) Y Y Y Y
protected(保护) Y Y Y N
包(默认) Y Y N N
private(私有的) Y N N N

一个例子(权限问题)

父类P 权限
A public(公有的)
B protected(保护)
C 包(默认)
D private(私有的)
子类C 权限
E public(公有的)
F protected(保护)
G 包(默认)
H private(私有的)
//定义一个主类
class Other{
    C c = new C();//定义子类对象c
    //通过子类对象调用父类变量
    c.A;//可以访问
    c.B;//Other和p是否同包
    c.C;//Other和p是否同包
    c.D;//不可以访问
    //通过子类对象调用子类的变量
    c.E;//可以访问
    c.F;//Other和c是否同包
    c.G;//Other和c是否同包
    c.H;//不可以访问
}

子类和父类在同一包中的继承性

当子类和父类在同一个包中时,父类中的private访问权限的成员变量不会被子类继承,也就是说,子类继承父类中的除private访问权限以外的其他成员变量作为子类的成员变量;同样,子类继承父类中的除private访问权限以外的其他方法作为子类的方法。

注意:子类不能调用父类private修饰的属性,但还是要为这个属性开辟空间

package ShangKe.di3;//同一个包
class P{
    public int A = 1;//公用的
    protected int B = 2;//保护的
    int C = 3;//默认的
    private int D = 4;//私有的
}
class C extends P{
    public int E = 5;//公用的
    protected int F = 6;//保护的
    int G = 7;//默认的
    private int H = 8;//私有的
}
public class Demo2 {
    public static void main(String[] args) {
        C c = new C();
        System.out.println(c.A);//1
        System.out.println(c.B);//2
        System.out.println(c.C);//3
        System.out.println(c.D);//错误,'D' 在 'ShangKe.di3.P' 中具有 private 访问权限
        System.out.println(c.E);//5
        System.out.println(c.F);//6
        System.out.println(c.G);//7
        System.out.println(c.H);//错误,'H' 在 'ShangKe.di3.C' 中具有 private 访问权限
    }
}

子类和父类不在同一包中的继承性

当子类和父类不在同一个包中时,父类中的private权限的成员变量不会被子类继承,也就是说,子类只继承父类中的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的protected和public访问权限的方法作为子类的方法。

注意:子类不能调用父类private,protected修饰的属性,但还是要为这个属性开辟空间

package ShangKe.di2;//包
class P{
    public int A = 1;//公用的
    protected int B = 2;//保护的
    int C = 3;//默认的
    private int D = 4;//私有的
}
public class C extends P{
    public int E = 5;
    protected int F = 6;
    int G = 7;
    private int H = 8;
}

package ShangKe.di3;
import ShangKe.di2.C;//引入包
public class Demo2 {
    public static void main(String[] args) {
        C c = new C();
        System.out.println(c.A);//1
        System.out.println(c.B);//错误,'B' 在 'ShangKe.di2.P' 中具有 protected 访问权限
        System.out.println(c.C);//错误,'ShangKe.di2.P' 在 'ShangKe.di2' 中不为 public。无法从外部包访问
        System.out.println(c.D);//错误,'D' 在 'ShangKe.di3.P' 中具有 private 访问权限
        System.out.println(c.E);//5
        System.out.println(c.F);//错误,'F' 在 'ShangKe.di2.C' 中具有 protected 访问权限
        System.out.println(c.G);//错误,'G' 在 'ShangKe.di2.C' 中不为 public。无法从外部包访问
        System.out.println(c.H);//错误,'H' 在 'ShangKe.di3.C' 中具有 private 访问权限
    }
}

posted on 2021-03-25 22:16  月下伊独舞  阅读(342)  评论(0编辑  收藏  举报