package和访问控制符
一、package
(一)包的明明规则
1.包名全部由小写字母(多个单词也全部小写);
2.如果包名包含多个层次,每个层次应该用“.”分割;
3.包名一般由倒置的域名开头,比如com.baidu;——不要有www
4.自定义包不能java开头
(二)包的两种导入方法
1.在每个类名之前添加完整的包名
java.util.Date today = new java.util.Date(); //类名之前添加完整的包名
2.通过import关键进行引包
import java.util.Date;
import java.util.*;可以导入所有的包
//(注意)对于两个包中类出现同名现象时,并且两个类都需要使用时。则需要在类前加入完整包名
3.补充
二、访问控制符
(一)protected
-
protected(protected修饰的方法或属性最大可以被不同包的子类操控)
-
如果protected修饰的属性和方法均为非静态的,则只能在子类中通过子类实例化对象调用其继承过来的属性和方法,而不能使用父类实例化的对象去调用
public class Son extends Father{
public static void main(String[] args) {
Father two = new Father();
Son one = new Son();
one.printf(); //只能通过子类对象来调用父类(不同包)的方法
//two.printf();//不可以调用,报错The method printf() from the type Father is not visible
}
}
//父类非静态的方法
public class Father {
protected void printf() {
System.out.println("我的名字");
}
}
注意:protected修饰的方法或属性,只能在子类中通过实例化子类对象来调用。
3. 如果protected修饰的属性和方法均为静态,可以通过父类类名或者子类类名来直接调用
public class Son extends Father{
public static void main(String[] args) {
Father.printf(); //父类类名调用
Son.printf(); //子类类名调用
}
}
//父类的静态方法
public class Father {
protected static void printf() {
System.out.println("我的名字");
}
}
(二)默认的(只能在本包中被调用)
public class Son extends Father{
public static void main(String[] args) {
Father two = new Father();
Son one = new Son();
//one.printf();父类对象和子类对象都不能调用The method printf() from the type Father is not visible
//two.printf();
}
}
//父类默认的方法
public class Father {
void printf() {
System.out.println("我的名字");
}
}