第十四天 包机制和访问控制权限

包机制概述
  • 作用
    • 方便程序的管理
    • 不同功能的类分别存放在不同的包下
  • package怎么用?
    • package是一个关键字,后面加包名
    • package只能出现在源码的第一行
  • 命名规范
    • 一般采用公司域名倒叙的方式
    • 公司域名倒叙 + 项目名 + 模块名 + 功能名
使用import机制
  • 关于import的使用

    • 什么时候用?
      • A类需要调用B类
      • A类和B类在同一个包下,不需要使用import
      • A类和B类不在同一个包,需要使用import
    • 怎么用?
      • import语句只能出现在package语句之下,class声明语句之上
      • import语句还能采用星号的方式
  • 相同位置的包

package Day13包机制和访问控制权限;

public class Test01 {
    public static void main(String[] args) {
        Day13包机制和访问控制权限.Test01 test01 = new Day13包机制和访问控制权限.Test01();
        System.out.println(test01);

        //包名在这里是可以省略的,因为Day13包机制和访问控制权限和Test01处于同一个包之下
        Test01 test02 = new Test01();
        System.out.println(test02);
    }
}
  • 不同位置的包
package Day13包机制和访问控制权限;

//导入需要的包
import Day023IO流.User;

public class Test02 {
    public static void main(String[] args) {



        /*
        如果即不导入包,又new的时候不将包名写全就会报错
            User user = new User(1, "张三");
            System.out.println(user);

            java: 找不到符号
            符号:   类 User
            位置: 类 Day13包机制和访问控制权限.Test02
        * */

        //在new的时候将包名带上也是可以
        Day023IO流.User user = new Day023IO.User(1, "张三");
        System.out.println(user);


        //最为简单的方式就是使用 import机制,导入包
        User user2 = new User(2, "李四");
        System.out.println(user2);
    }
}
解释Scanner
package Day13包机制和访问控制权限;

import java.util.Scanner;
import java.util.*; //这样写也可以,表示将util包下所有的文件全部导入

public class Test03 {
    public static void main(String[] args) {
        //导入包之前
        java.util.Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        System.out.println("您输入的字符串是:" + str);

        //导入包之后
        Scanner scanner2 = new Scanner(System.in);
        int i = scanner2.nextInt();
        System.out.println("您输入的数字是:" + i);

    }
}

注:“import java.”这种情况是不允许的,"*" 只能代表某些类名

访问控制权限
  • 种类
控制访问符含义控制范围
private私有的只能在本类中访问
protected受保护的只能在本类、同包、子类中访问
public公开的在任何位置都可以访问
默认的只能在本类以及同包下可以访问
package Day13包机制和访问控制权限;

public class User {
    public static void main(String[] args) {

    }
    //私有属性
    private int id;

    //受保护的属性
    protected int age;

    //公开的属性
    public int weight;

    //默认属性
    String name;



    //私有方法
    private void m1(){}

    //受保护的方法
    protected void m2(){}

    //公开的方法
    public void m3(){};

    //默认的方法
    void m4(){}



    //私有的静态方法
    private static void m5(){}

    //受保护的静态方法
    protected static void m6(){}

    //公开的静态方法
    public static void m7(){}

    //默认的静态方法
    static void m8(){}
}

//私有的类 ———— 不存在
//private class Vip{}
//java: 此处不允许使用修饰符private

//受保护的类 ———— 不存在
//protected class Vip{}
//java: 此处不允许使用修饰符protected

//默认的类
class Vip{}
  • 测试01(在同一个包下,未继承)
package Day13包机制和访问控制权限;

/*
* 同包,未继承
* */

public class UserTest {
    public static void main(String[] args) {
        User user = new User();

        //访问“私有属性”
        //System.out.println(user.id);
        //java: id 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的属性”
        System.out.println(user.age);

        //访问“公开的属性”
        System.out.println(user.weight);

        //访问“默认属性”
        System.out.println(user.name);

        //访问“私有方法”
        //user.m1();
        //java: m1() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的方法”
        user.m2();

        //访问“公开的方法”
        user.m3();

        //访问“默认的方法”
        user.m4();

        //访问“私有的静态方法”
        //User.m5();
        //java: m5() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的静态方法”
        User.m6();

        //访问“公开的静态方法”
        User.m7();

        //访问你“默认的静态方法”
        User.m8();

    }
}
  • 测试02(同包,且继承)
package Day13包机制和访问控制权限;

/*
* 同包,且继承
* */

public class UserTest02 extends User{
    public static void main(String[] args) {
        User user = new User();

        //访问“私有属性”
//        System.out.println(user.id);
        //java: id 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的属性”
        System.out.println(user.age);

        //访问“公开的属性”
        System.out.println(user.weight);

        //访问“默认属性”
        System.out.println(user.name);

        //访问“私有方法”
        //user.m1();
        //java: m1() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的方法”
        user.m2();

        //访问“公开的方法”
        user.m3();

        //访问“默认的方法”
        user.m4();

        //访问“私有的静态方法”
        //User.m5();
        //java: m5() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的静态方法”
        User.m6();

        //访问“公开的静态方法”
        User.m7();

        //访问你“默认的静态方法”
        User.m8();
    }
}
  • 测试03(在不同的包下,未继承)
package Day13包机制和访问控制权限.UserPackage;

import Day13包机制和访问控制权限.User;

/*
* 不同包,且未继承
* */

public class UserTest {
    public static void main(String[] args) {
        User user = new User();

        //访问“私有属性”
        //System.out.println(user.id);
        //java: id 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的属性”
        //System.out.println(user.age);
        //java: age 在 Day13包机制和访问控制权限.User 中是 protected 访问控制

        //访问“公开的属性”
        System.out.println(user.weight);

        //访问“默认属性”
        //System.out.println(user.name);
        //java: name在Day13包机制和访问控制权限.User中不是公共的; 无法从外部程序包中对其进行访问

        //访问“私有方法”
        //user.m1();
        //java: m1() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的方法”
        //user.m2();
        //java: m2() 在 Day13包机制和访问控制权限.User 中是 protected 访问控制
        
        //访问“公开的方法”
        user.m3();

        //访问“默认的方法”
        //user.m4();
        //java: m4()在Day13包机制和访问控制权限.User中不是公共的; 无法从外部程序包中对其进行访问
        
        //访问“私有的静态方法”
        //User.m5();
        //java: m5() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的静态方法”
        //User.m6();
        //java: m6() 在 Day13包机制和访问控制权限.User 中是 protected 访问控制
        
        //访问“公开的静态方法”
        User.m7();

        //访问你“默认的静态方法”
        //User.m8();
        //java: m8()在Day13包机制和访问控制权限.User中不是公共的; 无法从外部程序包中对其进行访问
    }
}
  • 测试04(不同包,且继承)
package Day13包机制和访问控制权限.UserPackage;

import Day13包机制和访问控制权限.User;
/*
* 不同包,且继承
* */
public class UserTest02 extends User {
    public static void main(String[] args) {
        User user = new User();

        //访问“私有属性”
        //System.out.println(user.id);
        //java: id 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的属性”
        //System.out.println(user.age);
        //java: age 在 Day13包机制和访问控制权限.User 中是 protected 访问控制

        //访问“公开的属性”
        System.out.println(user.weight);

        //访问“默认属性”
        //System.out.println(user.name);
        //java: name在Day13包机制和访问控制权限.User中不是公共的; 无法从外部程序包中对其进行访问

        //访问“私有方法”
        //user.m1();
        //java: m1() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的方法”
        //user.m2();
        //java: m2() 在 Day13包机制和访问控制权限.User 中是 protected 访问控制

        //访问“公开的方法”
        user.m3();

        //访问“默认的方法”
        //user.m4();
        //java: m4()在Day13包机制和访问控制权限.User中不是公共的; 无法从外部程序包中对其进行访问

        //访问“私有的静态方法”
        //User.m5();
        //java: m5() 在 Day13包机制和访问控制权限.User 中是 private 访问控制

        //访问“受保护的静态方法”
        User.m6();

        //访问“公开的静态方法”
        User.m7();

        //访问你“默认的静态方法”
        //User.m8();
        //java: m8()在Day13包机制和访问控制权限.User中不是公共的; 无法从外部程序包中对其进行访问
    }
}

结论1

控制访问符本类同包子类任意位置
public
protected不可
默认不可不可
private不可不可不可

结论2

控制访问符属性方法接口
public
protected不可不可
默认
private不可不可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值