访问修饰符:用来修饰被访问的类、属性、方法
访问修饰符 | 作用域 | 能被修饰 |
---|---|---|
public | 任何位置 | 类、属性、方法 |
protected | 继承的关系都是可以访问 | 属性和方法 |
缺省(没有修饰) | 同一个包中 | 类、属性、方法 |
private | 类中 | 属性和方法 |
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也会报错,因为缺省修饰+不同包
若新建一工程,结构如下所示:
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