Java中访问权限修饰符

1.访问修饰符介绍

Java中访问权限修饰符可以修饰类的属性、方法和内部类对于其他类的可访问性。一般情况下,源文件中只有一个类,而这个类只能是public或default(无修饰符)修饰。

Java中的访问权限修饰符
权限修饰符释义同一个类同一个包子类所有类
public公共的
protected受保护的 
default默认的  
private私有的   

public  表示公共的,可以被该项目下的所有包中的任意类所访问。

protected 表示受保护的,可以被同一个包中的所有类所访问,也可以被其子类访问。(下文重点讲解)

default 表示默认的,即没有任何访问修饰符修饰的情况,可以被同一个包中的所有类所访问。

private 表示私有的,只能在自己类中被访问,其他类不能访问。

上文的访问指的是通过对象调用其内部的属性或方法,在其他类是否可见(可访问)的问题。

2.继承关系中第三方类和子类访问父类的情况

2.1 父类和子类、第三方类在同包的情况

   父类代码如下:

package com.test;

public class A {
    private String aPrivate;
    String aDefault;
    protected String aProtected;
    public String aPublic;
}

      子类代码如下:

package com.test;

public class B1 extends A {
    public void test(){
        /**
         * 子类和父类在同包情况下,可以访问父类中除private修饰的属性和方法
         */
        this.aDefault = "";
        this.aProtected = "";
        this.aPublic = "";
    }
}

要点1: 子类和父类在同包情况下,子类可以访问父类中除了private修饰的属性和方法。

  第三方类代码如下

package com.test;

public class C {
    public static void main(String[] args) {
        /**
         * 第三方类和父类包在同一个包的情况下,父类中除了private修饰的方法和属性
         */
        A a = new  A();
        a.aDefault = "";
        a.aProtected = "";
        a.aPublic = "";
        /**
         * 第三方类和父类以及子类在同一个包的情况下,可以通过子类获取父类中除了private修饰的方法和属性
         */
        B1 b = new B1();
        b.aPublic = "";
        b.aProtected = "";
        b.aPublic = "";

    }
}

要点2:第三方类和父类在同一个包的情况下,可以通过父类对象直接调用除了private修饰的所有方法和属性。

要点3:第三方类和父类以及子类在同一个包的情况下,可以通过子类获取父类中除了private修饰以外所有属性和方法。

2.2 父类和第三方类在同一个包中,子类在另外一个包中

父类代码如上文。

子类代码如下:重点关注子类包的声明

package com.test.ABC;

import com.test.A;

public class B2 extends A {
    public void test(){
        /**
         * 子类和父类不在同包的情况下,子类只能使用父类中public和protected修饰的属性和方法
         */
        this.aProtected  ="";
        this.aPublic = "";
    }
}

要点4:子类和父类不在同包的情况下,子类只能在其内部使用父类的public和protected修饰的所有属性和方法。

第三方类代码如下:

package com.test;

import com.test.ABC.B2;

public class C {
    public static void main(String[] args) {
        /**
         * 第三方类和父类在同一个包中,和子类不在同一个包中,第三类中可以通过子类对象获取到父类中protected和public修饰的方法和属性
         */
        B2 b2 = new B2();
        b2.aProtected = "";
        b2.aPublic = "";
    }
}

要点5:第三方类和父类在同一个包中,和子类不在同一个包中,第三方类可以通过子类对象获取父类中public和protected修饰的所有属性和方法。

2.3 第三方类和子类在同一个包中,与父类不在同一个包中的情况

父类代码和子类代码如上文。

第三方类的代码如下:

package com.test.ABC;

import com.test.A;
import com.test.B1;

public class C1 {
    public static void main(String[] args) {
        /**
         * 父类和子类在同一个包中,第三方类和父类、子类不在同一个包中,此时通过子类对象或父类对象只能访问public修饰的属性和方法
         *
         */
        B1 b = new B1();
        b.aPublic = "";
        A a = new A();
        a.aPublic ="";

        /**
         * 父类和子类、第三方类不在同一个包中时,在第三方类中只能通过子类对象访问父类中public修饰的属性和方法
         */
        B2 b2 = new B2();
        b2.aPublic = "";

    }
}

要点6:子类和第三方类在同一包中,父类与其不在同一个包中是,在第三类中只能通过子类对象访问父类的public修饰的属性和方法。此时子类继承的protected修饰的属性和方法类似于在子类中用private修饰该属性和方法。

要点7:父类和子类在同一包中时,第三方类和父类以及子类不在同一个包中时,此时通过父类对象或者子类对象都只能访问父类对象中public修饰的属性和方法。

3 总结

结论1:父类、子类以及第三方类在同一个包中时,可以通过子类或者父类对象访问父类中除了private修饰以外的所有属性和方法。

结论2:父类和子类不在同一个包中时,无论第三方类在何处(除与父类同包),第三方类通过子类对象只能访问父类中的public修饰的属性和方法。此时子类继承的protected修饰的属性和方法类似于在子类中用private修饰的属性和方法。

结论3:父类和子类无论是否在同一个包中,在子类中都可以访问到protected和public修饰的属性和方法,如果在同包中,子类可以访问父类的default修饰的属性和方法,反之,则不能访问。

结论4(特例):父类和第三方类同包,但父类和子类不同包时,在第三方类中可以通过子类对象获取到父类中protected和public修饰的方法和属性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值