Java 包 与 权限修饰符

包的三大作用

  1. 区分相同名字的类
  2. 当类很多时,可以很好的管理
  3. 控制访问范围

基本语法

package run.arbor;

  • package:关键字,表示打包,用于声明当前类所在的包,需要放在class的最上面,一个类中最多只能有一个package语句。
  • run.arbor:表示包名

包的本质

实际上就是创建不同的文件夹(目录)来保存类文件。
run.arbor的本质就是run文件夹下有个arbor的文件夹。

包的使用

在同一个包中不可以创建相同类名的文件,不同包中就可以
在这里插入图片描述

在使用的时候可以,引入不同包的类,但是同名的类只能引入一个,同时引入两个的话则会报错
在这里插入图片描述
在这里插入图片描述

如果有这样的需求,可以引入全类名进行使用

package object02.run.arbor.test;

import object02.run.arbor.xiaoming.Dog;

public class Test {
    public static void main(String[] args) {
        // run.arbor.xiaoming.Dog;
        Dog dog = new Dog();

        // run.arbor.xiaoqiang.Dog
        object02.run.arbor.xiaoqiang.Dog dog1 = new object02.run.arbor.xiaoqiang.Dog();
    }
}

包命名

命名规则

只能包涵数字、字母、下划线、小圆点,不能使用数字开头,不能是关键字或者保留字,如果有多个单词,建议全小写
例如:parkhouseparkhouse 两个单词组成,更建议是park.house

命名规范

一般是小写字母+小圆点,一般是:公司网址后缀.公司网址.项目名.业务模块名

例如:run.arbor.oa.user
网址是 arbor.run(推广一下,虽然没东西),项目名是oa系统,业务模块是用户模块

常用包

一个包下可以有很多个类,而java中常用的包有:

  • java.lang.*:基本包,默认引入,不需要再次引入
  • java.util.*:工具包,里面有很多常用的工具类
  • java.net.*:网络包,网络开发
  • java.awt.*:界面开发包,GUI

引入包

语法:import 包;

  • import:用于引入类,放在package的下面,在类定义前面,可以有多句,没有顺序要求,同一个包下不需要引入

比如引入 Scanner 类,就写import java.util.Scanner;,此时就只是引入了util包中的Scanner类。
import java.util.*;,则是引入util包中的所有类。建议需要哪个类,就引入哪个类,不建议使用*全部引入。

权限修饰符

在Java中提供了四种访问权限,用于控制方法和属性(成员变量)的访问权限。使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限。

  • public:公共的,对外公开
  • protected:受保护的,对子类和同一个包中的类公开
  • default:默认的(可以不写),对同一个包中的类公开
  • private:私有的,只有类本身可以访问,不对外公开
public(公开的)protected(受保护的)default(默认的)private(私有的)
同一类中
同一包中
不同包子类
无关类

修饰符可以用来修饰类和类中的属性(成员方法)、方法,类只能用默认的和public修饰

定义一个类,这个类在object02.modifier.entity包中,分别使用四种不同的访问修饰符,这里可以看到同一个类中,四种不同的修饰符的成员变量在同一个类的方法中都是可以访问到的。

package object02.modifier.entity;

public class A {

    public int n1 = 100;
    protected int n2 = 200;
    int n3 = 300;
    private int n4 = 400;

    public void m1() {
        System.out.println("n1 = " + n1);
        System.out.println("n2 = " + n2);
        System.out.println("n3 = " + n3);
        System.out.println("n4 = " + n4);
    }
}

在同一个包下定义另一个类,这时可以看到,被private修饰的n4变量不能被访问了

image

package object02.modifier.entity;

public class B {
    public void say() {
        A a = new A();
        System.out.println("n1 = " + a.n1);
        System.out.println("n2 = " + a.n2);
        System.out.println("n3 = " + a.n3);
    }
}

如果子类在同一个包中,那么这个类中的默认的修饰符修饰的属性也是可以被子类访问的,因此,在不同包中定义一个子类

package object02.modifier.pkg;

import object02.modifier.entity.A;

public class C extends A {
    public void sayC() {
        System.out.println("n1 = " + n1);
        System.out.println("n2 = " + n2);
    }
}

同样,在不同包的类就只能访问public修饰的属性或者方法了

package object02.modifier.pkg;

import object02.modifier.entity.A;

public class D {
    public void sayD(){
        A a = new A();
        System.out.println("n1 = " + a.n1);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VincentHu_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值