合抱之木,生于毫末;百丈之台,起于垒土;千里之行,始于足下。《老子》
目录
大纲
白话总结:
访问修饰符一分为二的看。一类: private 除了当前类,其它都不行,public所有的都可以。二类:default的只有包内可以,protected 与defalut基本类似,但是protected 有一种继承的情况。图三(只讨论特殊) 图四(流程大体吧整个过程串了一遍) 表1(**横向和纵向的进行比较感觉不错)
访问修饰符 :
private :类的修饰符。 ——出了当前类就访问不到
default(不写):包的修饰符 。 ——出了包就访问不到
protected :大部分的权限和default一样。特殊情况是具有父子类关系的时候。
public :所有的都可以访问,这种和private是两个极端的情况可以忽略不计。
非访问修饰符
static 物理位置(自己理解的)(类 接口 抽象类)都不可以修饰 身份位置(自己理解的)(内部类 相当于属性)(属于属性 方法 层面)
final 抽象类 接口不可以修饰(抽象类 和接口就是为了更好的拓展)如果可以修饰就相互矛盾。(属于类 方法 属性 层面)
abstract 不能修饰 属性 其它都可以(属于类 方法 层面的)
synchronized (属于方法层面的)
volatile (属于属性层面的)
结合表1 和表2
类 抽象类 内部类 接口 放在一类
内部类 属性 方法 放在一类
defalut:
相同包
public class Animal {
String age;
String name;
}
public class TestAnimal {
public static void main(String[] args) {
Animal animal = new Animal();
String age = animal.age;
String name = animal.name;
}
}
不同包
public class Animal {
String age;
String name;
}
protected
不同包
public class Animal {
protected String age;
protected String name;
}
public class Animal {
protected String age;
protected String name;
}
不同包具有继承关系的子类可以访问父类的属性和方法 这是子类继承的
相同包
public class Animal {
protected String age;
protected String name;
}
public class TestAnimal {
public static void main(String[] args) {
Animal animal = new Animal();
String age = animal.age;
String name = animal.name;
}
}
参考资料:
https://www.runoob.com/w3cnote/java-protected-keyword-detailed-explanation.html