1.3.1 面向对象的三大特征

  • 封装
  • 继承
  • 多态

封装:指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

将该隐藏的隐藏起来,把该暴露的暴露出来。
需要通过使用JAVA 提供的访问控制来实现。

1.3.2. 使用访问控制符

  • private(当前访问权限) : 这个成员只能在当前类的内部被访问,用来修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。
  • protected (子类访问权限) : 成员即可以被同一个包中的其他类访问,也可以被不同包中的子类访问。通常是希望其子类来重写这个方法。
  • public (公共访问权限): 成员或者外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包中,是否具有父子继承关系。
  • default (包访问权限):如果类里的一个成员(包括成员变量、方法和构造器)或者一个外部类不使用任何访问控制符修饰,就称它是包访问权限的,default访问控制的成员或外部类可以被相同包下的其他类访问。

注:外部类 只能有两种访问控制级别 : public 和 默认
外部类不能使用private 和 protected 修饰,因为外部类没有处于任何类的内部。
不使用任何访问控制符修饰的外部类只能被同一个包中的其他类使用。

  1. public class Person
  2. {
  3. // 使用private 修饰成员变量,将这些成员变量隐藏起来
  4. private String name;
  5. private int age;
  6. // 提供方法来操作name成员变量
  7. public void setName(String name)
  8. {
  9. // 执行合理性校验,要求用户必须在2-6之间
  10. if ( name.length() > 6 || name.length() < 2)
  11. {
  12. System.out.println("您设置的人名不符合要求");
  13. return;
  14. }
  15. else
  16. {
  17. this.name = name;
  18. }
  19. }
  20. public String getName()
  21. {
  22. return this.name;
  23. }
  24. // 提供方法来操作age 成员变量
  25. public void setAge(int age)
  26. {
  27. // 执行合理性校验,要求用户年龄必须在0-100
  28. if age > 100 || age < 0)
  29. {
  30. System.out.println("您设置的年龄不合法");
  31. return;
  32. }
  33. else
  34. {
  35. this.age = age;
  36. }
  37. public int getAge()
  38. {
  39. return this.age;
  40. }
  41. }
  42. public class PersonTest
  43. {
  44. public static void main(String[] args)
  45. {
  46. var p = new Person();
  47. // 访问age 成员需要通过对应的方法
  48. p.setAge(1000);
  49. p.setAge(30);
  50. }
  51. }
  • 如果某个类主要用作其他类的父类,该类里包含的大部分方法可能希望被其子类重写,而不想被外界直接调用,则应该使用protected 修饰这些方法。
  • 希望暴露出来给其他类自由调用的方法应该使用public修饰。
  • 因此,类的构造器通过使用public修饰,从而允许在其他地方创建该类的实例。
  • 因为外部类通常都希望被其他类自由使用,所以大部分外部类都使用public 使用。

    1.2.3. package、import和 import static

1.包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。
java 允许将一组功能相关的类放在同一个package下,从而组成逻辑上的类库单元。

  1. package packageName;

使用该语句意味着源文件里定义的所有类都属于这个包。
位于包中的每个类的完整类名都应该是包名和类名的组合,如果其他人需要使用该包下的类,也应该使用包名加类名的组合。

位于包中的类,在文件系统中也必须有与包名层次相同的目录结构。