5、Java 修饰符

引言:Java的修饰符根据修饰的对象不同,分为类修饰符、方法修饰符、变量修饰符,其中每种修饰符又分为访问控制修饰符和非访问控制修饰符。

 

1、访问控制修饰符的总结

四个关键字:public、protected、default、private(他们决定了紧跟其后被定义的东西可以被谁使用)

2、对修饰符的理解

  在叙述protected修饰符使用之前,先来说一下java,可以发现,开发java程序是一个时时刻刻都在编写类、开发类、定义类的过程。类里面可以有main方法。(main方法不管存在那个类中,都要通过打点的方式调用某个类的成员)

  在当前类的定义中,main方法之外,可以直接通过成员的名字来使用本类中的成员变量,不管这个成员是什么访问修饰符修饰的,也不用通过对象打点调用的方式进行,当前类的main方法中,可以通过对象打点的方式调用。所以说访问控制修饰符在当前类的定义中相当于没有起到任何作用。但是java程序的开发,不仅仅是开发一个类而已,更多的是类之间的相互耦合,换句话说就是一个已经定义好的类,需要作为另一个类的成员,或者是成为另一个类的局部变量(在方法中声明的)、或者是成为基类被子类继承等,也只有在这个时候访问控制修饰符才会起到访问控制的作用。

  访问控制符中的private,和public是最好理解的。

 

3、代码测试

package com.example.test;

/**
* @author lin
* @version 1.0
* @date 2020/6/21 20:21
* @Description TODO
*/
public class Person {
   public String uname = "person 王 ";

   public void introduceMyself() {
       System.out.println("com.example.test 包下:" + uname);
  }
}
package com.example.test;

/**
* @author lin
* @version 1.0
* @date 2020/6/21 20:21
* @Description TODO
*/
public class Student {
   Person p = new Person();

   public void test() {
       System.out.println("com.example.test 包下:" + p.uname);
  }
}
package com.example.test;

/**
* @author lin
* @version 1.0
* @date 2020/6/21 20:21
* @Description TODO
*/
public class Teacher extends Person {
   public int age;
   Person p = new Person();

   public void test1() {
       System.out.println("com.example.test 包下:" + p.uname);
  }
}
package com.example.test2;

/**
* @author lin
* @version 1.0
* @date 2020/6/21 20:22
* @Description TODO
*/
public class Person {
   public String uname = "haha";

   public void test2() {
       System.out.println("com.example.test2 包下:" + uname);
  }

}

测试类

package com.example.test;

/**
* @author lin
* @version 1.0
* @date 2020/6/21 20:23
* @Description TODO
*/
public class Test {
   public static void main(String[] args) {
       Person person = new Person();
       person.introduceMyself();
       Student student = new Student();
       student.test();
       Teacher teacher = new Teacher();
       teacher.test1();
       com.example.test2.Person person1 = new com.example.test2.Person();
       person1.test2();
  }
}

1、测试类的结果 显示public在上述均能访问到

2、用同样的四个类  来测试protected

在将Person中的uanme改为protected后  类Parents便报错了  The field Person.uname is not visible (说明不能跨包)

其他三个无影响

3、private

只有本类中可以访问 但是借助在Person类中有关uname的set、get方法便可以进行访问

4、default

 

测试结果说明 只能在本包中进行访问 在其他包  即使是继承关系 也无法进行访问,自己多试试。

posted @ 2020-07-20 18:03  发哥讲Java  阅读(203)  评论(0)    收藏  举报