测试四种权限修饰符
文章内容选自尚硅谷
以前的内容没有讲解完全,现在补上,链接为 java的四种权限修饰符.
测试private
private是类封装性的重要体现,在java中,私有方法和属性只能在类的内部调用
先在com.atguigu.java2包内创建一个Order的类
package com.atguigu.java2;
public class Order {
private int orderPrivate;
int orderDefault;
protected int orderProtected;
public int orderPublic;
private void methodPrivate(){
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic =4;
}
void methodDefault(){
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic =4;
}
protected void methodProtected(){
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic =4;
}
public void methodPublic(){
orderPrivate = 1;
orderDefault = 2;
orderProtected = 3;
orderPublic =4;
}
}
再在同一个包下创建一个OrderTest的类
package com.atguigu.java2;
public class OrderTest {
public static void main(String[] args) {
Order order = new Order();
order.orderDefault = 1;
order.orderProtected =2;
order.orderpublic =3;
order.methodDefault();
order.methodProtected();
order.methodPublic();
// order.methodPrivate();
// order.orderPrivate();
}
}
注释掉的部分即为不可visible的部分,系统会因为封装性而报错的部分。
测试protected和default
protected可用于不同包的子类,也能用于同一个包下,这儿主要测试不同包下的子类
创建一个com.atguigu.java3的包,再在包内创建一个SubOrder的类,该类要继承自com.atguigu.java2包下的Order类,因此必须要import导入。代码如下
package com.atguigu.java3;
import com.atguigu.java2.Order;
public class SubOrder extends Order {
public void method(){
orderProtected = 1;
orderPublic =2;
methodProtected();
methodPublic();
// orderDefault =3;
// orderPrivate =4;
//
// methodDefault();
// methodPrivate();
}
}
注释掉的部分即为not visible的部分,protected体现了不同包下的继承关系,需要用一个protected修饰符来扩大继承关系的适用范围。
因为是不同包,因此default缺省的属性和方法都不适用了,因为他们只适用于同一个包下。
测试public
public的适用范围是整个工程,但是在包下导入其他包的类,要用import关键字,这儿记住一个快捷方式ctrl + shift+o,能够自动加上import关键字。
package com.atguigu.java3;
import com.atguigu.java2.Order;
public class OrderTest {
public static void main(String[] args) {
Order order = new Order();//ctrl + shift + o能够快速导入包
order.orderPublic = 1;
order.methodPublic();
// order.orderPrivate = 2;
// order.orderDefault =3;
// order.orderProtected = 4;
//
// order.methodPrivate();
// order.methodDefault();
// order.methodProtected();
}
}
同样,注释部分是not visible的。