首页 专题 文章 代码 归档
Java 面向对象-包
2020.02.28 12:09 2020.02.28 12:09

1. Java中的包

Java中的包是封装一组类,子包和接口的机制。软件包用于:

  • 防止命名冲突
  • 更轻松地搜索/定位和使用类,接口,枚举和注释
  • 提供受控访问:受保护和默认有包级别访问控制。受保护的成员可以通过同一个包及其子类中的类访问。默认成员(没有任何访问说明符)只能由同一个包中的类访问
  • 包可以被视为数据封装(或数据隐藏)

包的语法格式:

package pkg1[.pkg2[.pkg3…]];

举例如下:

package java.util.Arrays;
public class Something{
   ...
}

那么此类位于的目录是:

java/util/Arrays/Something.java

如上面所以,package java.util.Arrays;定义了一个类的位置信息,所以我们如果要使用,那么就必须通过import关键字;

2. import关键字

在 java 源文件中 import 语句应位于 package 语句之后所有类的定义之前,可以没有,也可以有多条,其语法格式为:

import package1[.package2…].(classname|*);

*的意思是导入该包下的所有类:

import java.net.http.HttpClient;
import java.util.*;

如上,我们分别导入了HttpClient类,然后导入了util下的所有类;

3. 作用域问题

位于同一个包的类,可以访问包作用域的字段和方法。不用publicprotectedprivate修饰的字段和方法就是包作用域。例如:

Animal.java位于test03包下:

package test03;//定义位于test03包下

public class Animal {

    public String name = "动物";
    protected int age = 10;

    // 打印名字
    public void printName() {
        System.out.println("父类中的打印名字:" + this.name);
    }

    // 打印年龄
    public void printAge() {
        System.out.println("父类中的打印年龄:" + this.age);
    }
}

Dog.java也位于test03包下,那么继承时,就没有使用import导包:

package test03;

public class Dog extends Animal {

    @Override
    // @Override是注解,这个注解代表是重写父类方法
    public void printName() {
        super.printName();// super代表父类,这里即调用父类的printName方法
        System.out.println("子类Dog中的打印名字(super调用):" + super.name);
        System.out.println("子类Dog中的打印名字(this调用):" + this.name);

    }

    @Override
    public void printAge() {
        super.printAge();

        System.out.println("子类Dog中的打印名字:" + super.age);
    }
}

4. 倒置域名

在互联网公司中,为了包冲突,所以约定俗成的使用了倒置域名来定义包名:

比如迷思爱:misiai.com

那么一般定义的报名就是:com.misiai.xxx

子包就可以根据功能自行命名。

本节阅读完毕! (分享
二维码图片 扫描关注我们哟