包的作用: 对类进行分类管理
定义格式: packge.包名(多级包用.分开)
手动建包
自动建包 javac -d . HelloWorld.java
import格式 import 包名 (此处表示怀疑,应该是导入包下面的类)
权限修饰符
修饰符 | 同一个类 | 同一个包中的子类、无关类 | 不同包中的子类 | 不同包中的无关类 |
---|---|---|---|---|
private | V | |||
默认 | V | V | ||
protected | V | V | V | |
public | V | V | V | V |
测试代码如下,另外还测试了同一个包中子类构造父类的实例和不同包中子类构造父类的实例的情况,发现都是一样的
package day20a;
public class Fu {
private void show1(String args){
System.out.println("这是private");
}
void show2(String args){
System.out.println("这是默认");
}
protected void show3(String args){
System.out.println("这是protected");
}
public void show4(String args){
System.out.println("这是public");
}
public static void main(String[] args) {
Fu f = new Fu();
f.show1("1");
f.show2("2");
f.show3("3");
f.show4("4");
}
}
package day20a;
public class Zi extends Fu {
public static void main(String[] args) {
Fu f2 = new Fu();
//private方法无法访问
//f2.show1("1");
f2.show2("2");
f2.show3("3");
f2.show4("4");
Zi z = new Zi();
z.show2("2");
z.show3("3");
z.show4("4");
//一样的,同一个包中的子类,不管是构造父类或者子类,都只能访问父类的非private
}
}
package day20a;
public class Other {
public static void main(String[] args) {
Fu f3 = new Fu();
//同一个包下的其他类也无法访问private
//f3.show1("1");
f3.show2("2");
f3.show3("3");
f3.show4("4");
}
}
package day20b;
import day20a.Fu;
public class Test1 extends Fu {
public static void main(String[] args) {
//备注:如果在子类访问父类,不同包中,也只能访问public
Fu f4 = new Fu();
//123都不行
//f4.show1("1");
//f4.show2("2");
//f4.show3("3");
f4.show4("4");
Test1 t1 = new Test1();
t1.show3("3");
t1.show4("4");
}
}
package day20b;
import day20a.Fu;
public class Test2 {
public static void main(String[] args) {
Fu f5 = new Fu();
//123都不行
//f5.show1("1");
//f5.show2("2");
//f5.show3("3");
f5.show4("4");
}
}
状态修饰符
final 关键字是最终的意思,可以修饰成员方法、成员变量、类
如果在父类中的某个方法、变量、类用final写了,那么子类就不能重写、重新赋值、继承
比如 public final void show4 public final int age =22 public final class Fu
final修饰局部变量
如果变量是基本类型:final修饰基本类型的数据值不能改变
如果变量是引用类型: final修饰引用类的地址值不能改变,但是地址里面的变量是可以变化的