Java—访问修饰符

访问修饰符:用来修饰被访问的类、属性、方法

访问修饰符 作用域 能被修饰
public 任何位置 类、属性、方法
protected 继承的关系都是可以访问 属性和方法
缺省(没有修饰) 同一个包中 类、属性、方法
private 类中 属性和方法

Java—访问修饰符
bean.User类:

package com.cao.test.word1.bean;

public class User {
    public String name = "cao";

    public void show() {
        System.out.println("show()...");
    }

}

Test类:

package com.cao.test.word1;

import com.cao.test.word1.bean.User;

public class Test {
    public static void main(String[] args) {
        User user = new User();
        System.out.println(user.name);
        user.show();
    }
}

正常执行

cao
show()...

如果把bean.User类的public去掉,即:

class User {
    public String name = "cao";

    public void show() {
        System.out.println("show()...");
    }

}

此时Test将报错,因为缺省修饰+不同包

同理,将成员变量和成员方法的public去掉,即:

public class User {
    String name = "cao";

    void show() {
        System.out.println("show()...");
    }

}

Test也会报错,因为缺省修饰+不同包


若新建一工程,结构如下所示:
Java—访问修饰符
Father类:成员变量用protected修饰

public class Father {
    protected String name="cao";

}

Son类继承Father类:

public class Son extends Father {
    public void show(){
       System.out.println(name);
    }
}

Test:

public class Test {
    public static void main(String[] args) {
        Son son = new Son();
        son.show();
    }
}

执行:

cao

因为成员变量用protected修饰+Son类继承Father类

在bean包下新建一类Test:
bean.Test类:

public class Test {
    public static void main(String[] args) {
        Father father=new Father();
        System.out.println(father.name);
    }
}

把Father类中成员变量的protected去掉,即:

public class Father {
    String name="cao";

}

为缺省修饰
此时Son类报错,但是bean.Test不报错,因为bean.Test与Father同包。

把Father类中成员变量的protected改为private,即:

public class Father {
    private String name="cao";

}

此时Son类报错,但是bean.Test也报错,因为private修饰使成员变量只能在类中被访问。

把Father类中成员变量的protected改为public,即:

public class Father {
    public String name="cao";

}

此时即使Son不是Father的子类,也可以正常访问:
Son类:

public class Son {
    public void show() {
        Father father = new Father();
        System.out.println(father.name);
    }
}

通过Test类的main函数执行:

cao
上一篇:2021-01-29


下一篇:动态规划——树形DP