0
点赞
收藏
分享

微信扫一扫

Java基础语法(十):包和访问控制

前言

Java是一门面向对象编程语言,因此它实现了各种面向对象编程的概念,其中之一是对访问权限进行控制。在Java中,这种控制是通过“访问修饰符”实现的。包则是Java中一个重要的概念,既可以用来组织Java类或接口,也可以配合访问控制实现对某些类或接口的限制访问。本篇文章将介绍Java中的包和访问控制。

一、包是什么?

Java包是一种将类和接口组织在一起的机制。它们主要用于保持有关类和接口的信息和访问控制。可以将类和接口分组为功能相似或相关的包。这有助于避免命名冲突,因为每个包中的所有类和接口都具有唯一的完全限定名。

Java包的命名约定是小写字母的有意义的单词序列,用句点分隔(例如com.example.myapp)。此命名约定使包名称易于读取和理解。

每个Java包都与磁盘上的一个目录相对应。包名中的每个句点(.)都转换为目录分隔符(/或\)。包目录中包含编译后的类文件。在编译Java类时,可以指定其包,为它们创建相应的目录层次结构。

包的作用:

1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

命名规则:

个人

indi:多人完成,版权属于发起者

包名为:indi.发起者名.项目名.模块名

pers :独自完成,公开,版权属于个人

包名为:pers.个人名.项目名.模块名

priv : 独自完成,非公开,版权属于个人

包名为:priv.个人名.项目名.模块名

团队

team:团队项目指由团队发起,并由该团队开发的项目,版权属于该团队所有

包名为:team.团队名.项目名.模块名

公司

com:由公司发起,版权由项目发起的公司所有

包名为:com.公司名.项目名.模块名

二、访问控制是什么?

Java提供了访问修饰符(private、protected、public和默认访问修饰符)来控制方法、变量以及类的访问权限。如果没有指定修饰符,则默认为“默认访问修饰符”。每个访问修饰符都有不同的访问级别,包括:

default (即默认,什么也不写): 也被称为“缺省访问修饰符”,在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

public : 对所有类可见。使用对象:类、接口、变量、方法

protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。

注意:不能修饰类(外部类)。

使用访问控制修饰符可以控制类的方法和变量的可访问性。这可以增强代码的封装性和安全性。包管理则用于管理Java中的包。

public:

被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。

如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

public static void main(String[] args) {
   // 方法体
}

protected:

protected 需要从以下两个点来分析说明:

子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;

子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)。

子类能访问 protected 修饰符声明的方法和变量,这样就能保护不相关的类使用这些方法和变量。

下面的父类使用了 protected 访问修饰符,子类重写了父类的 say() 方法。

class Human {
   protected boolean say(String msg) {
      // 方法体,具体逻辑
   }
}
 
class Man extends Human {
   protected boolean say(String msg) {
      // 方法体,具体逻辑
   }
}

如果把 say() 方法声明为 private,那么除了 Human 外,其他类将不能访问该方法。

如果把 say() 声明为 public,那么所有的类都能够访问该方法。

如果我们只想让该方法对其所在类的子类可见,则将该方法声明为 protected。

default:

使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public、static、final,而接口里的方法默认情况下访问权限为 public。

如下例所示,变量和方法的声明可以不使用任何修饰符。

int defaultNum;
 
// 默认方法
void myDefaultMethod() {
   System.out.println("This is a default method.");
}

private:

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。

声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。

private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

public class MyClass {
    private int privateNum; // 私有属性,只能在本类中访问
    
    private void privateMethod() { // 私有方法,只能在本类中调用
      // 方法定义...
    }
 
    public String getPrivateNum() {
      return this.privateNum;
    }
    public void setPrivateNum(String privateNum) {
      this.privateNum = privateNum;
    }
}

实例中,MyClass 类中的 privateNum 变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两个 public 方法:getPrivateNum() (返回 privateNum的值)和 setPrivateNum(String)(设置 privateNum 的值)

Java基础语法(十):包和访问控制_子类

访问控制和继承

请注意以下方法继承的规则:

父类中声明为 public 的方法在子类中也必须为 public。

父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。

父类中声明为 private 的方法,不能够被子类继承。

总结

Java中的包和访问控制是Java面向对象编程的重要概念。包可以用于组织相关的类和接口,从而提高代码的管理和开发便捷性。访问控制用于管理可见性和访问权限,从而增强代码的安全性和封装性。访问控制修饰符包括private、protected、public和默认访问修饰符。 Java软件包管理可以帮助我们轻松地管理、发布和维护软件包。

private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。


举报

相关推荐

0 条评论