说到修饰符,你们都知道有private deafult protect public,说到它们的区别,相信你们脑海会出现一张图。java
同一个类 | 同包非子类 | 子类 | 不一样包非子类 | |
---|---|---|---|---|
private | 是 | 否 | 否 | 否 |
default | 是 | 是 | 否 | 否 |
protected | 是 | 是 | 是 | 否 |
public | 是 | 是 | 是 | 是 |
那么怎么从代码层面解释呢,学东西不能停留在理论层面,毕竟只是一份实践的工做。因此请看下面讲解,毕竟实践才是检验真理的惟一标准,说白了就是写一些demo,验证一下,工做中咱们不了解某个方法或者某个类的时候,本人推荐写一些demo,作一些test,本人以为这是技巧之一。api
本实例访问方法只有两种框架
写demo验证本身想法时候,推荐使用test框架,不一样每次都写一个main方法,只要一个注解@test就能解决问题maven
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency>
也能够使用slf4j框架来打印信息spa
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.4</version> </dependency>
也能够使用lombok框架,实现注解@getter和@setter代替getter方法和setter方法code
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency>
须要建立对象 调用类中属性对象
package classtest; import lombok.Getter; import lombok.Setter; import org.junit.Test; /** * @Author buer * @create 2019/4/28 10:06 * @description 父类 */ @Getter@Setter public class Animal { public int id = 1; private String name="chen"; protected String parent = "parent"; @Test public void eat(){ Animal animal = new Animal(); System.out.println(animal.name); } }
chen继承
ps:贴图很麻烦 就贴字了ip
在本类建立对象能够直接访问private属性字段rem
建立对象,访问属性
package classtest; @Getter @Setter public class Classtest { @Test public void defaultTest(){ Animal animal = new Animal(); System.out.println(animal.name); } }
另外一个类name属性改变--》protected
package classtest; @Getter @Setter public class Animal { private int id; String name="chen"; protected String parent; }
chen
在同一个包中建立对象能够直接访问,不一样包下建立对象不能访问default 默认属性字段,例子省略
继承父类,不须要建立父类对象,直接访问protected属性字段
package butong; import classtest.Animal; import org.junit.Test; /** * @Author buer * @create 2019/5/4 14:37 * @description */ public class Animalbutong extends Animal{ @Test public void defaultTest(){ System.out.println(parent); } }
chen
在子类中能够直接进访问父类字段,不须要建立对象
在不一样包以及非子类关系下,建立对象能够访问public属性字段
test属性是public
package butong; import classtest.Animal; import org.junit.Test; /** * @Author buer * @create 2019/5/4 14:37 * @description */ public class Animalbutong { @Test public void defaultTest(){ Animal animal = new Animal(); System.out.println(animal.test); } }
chen
在不一样包以及非子类关系下,建立对象能够访问public属性字段