java修饰符的理解(重点protected)

java修饰符

java修饰符就是用来修饰标识符的(也就是用来修饰类中的变量方法的),当然也是有类修饰符的

public:对任何人都是可用的。

default:包访问权限,即在整个包内均可被访问。

private:除类型创建者和类型的内部方法之外的任何人都不能访问的元素。

上面三个一看就懂,下面这个我就懵逼了,继承的类可以访问,那我继承你的类不在一个包下可以访问不(我想了一下也是可以访问的)

protect:继承的类可以访问

但是当我们使用protect修饰变量的时候,如果在同一个包下面我们可以使用(这里说不清直接列子来看)

package com.lky.h1;

public class Base {

    private Integer id;
    protected String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Base [id=" + id + ", name=" + name + "]";
    }
}


package com.lky.h1;

import org.junit.Test;

public class test1 extends Base {

    /**
     * @Title: testBase
     * @Description: 父类本身的访问
     */
    @Test
    public void testBase(){
        Base base=new Base();
        base.setId(10);
//        base.id=9; 同一个包内private属性不能直接访问
        base.name="lky";//同一个包内protect属性可以直接访问
        System.out.println(base);
    }

    /**
     * @Title: testExends
     * @Description:  子类的访问
     */
    @Test
    public  void testExends(){
        test1 a=new test1();
        a.name="lky";//protect属性在子类中可见,可以直接访问
        a.setId(10);//private属性在子类中不可见,不能直接访问
        System.out.println(a);
    }
}


上面是同一个包下面的,注意对象调用变量

下面是不同包下面的调用

package com.lky.h2;

import org.junit.Test;

import com.lky.h1.Base;

public class test2 extends Base {
    @Test
    public void testBase() {
        Base base = new Base();
        // base.name="lky";不能直接访问
        // base.id=10; 不能直接访问
        base.setName("lky");
        base.setId(10);
        System.out.println(base);
    }

    @Test
    public void testExends() {
        test2 a = new test2();
        a.name = "lgh"; //可以直接访问
//        a.id = 10;    //不能访问
        a.setId(10);
        System.out.println(a);
    }

}

说明了如果protected如果只是说继承的类可以访问是没毛病的,但是我们要注意在同一个包下面的时候,我们是可以使用

若A和B在同一个包下:在B类中是可以通过A直接访问A中的protect属性

上一篇:expalin精讲


下一篇:three.js 简单方块绘制