包机制概述
- 作用
- 方便程序的管理
- 不同功能的类分别存放在不同的包下
- 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 | 可 | 可 | 不可 | 不可 |