继承权限的问题

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

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

一个例子(权限问题)

父类P权限
Apublic(公有的)
Bprotected(保护)
C包(默认)
Dprivate(私有的)
子类C权限
Epublic(公有的)
Fprotected(保护)
G包(默认)
Hprivate(私有的)
//定义一个主类
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 访问权限
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值