Java自学课程笔记4
2021年2月8日22点08分 JAVA自学课程笔记4: 接口(interface) 抽象方法和常量值的集合。本质上是一种特殊的抽象类。 格式: (public) interface InterfaceName (extends SuperInterfaceList){ //常量定义和方法定义 } 接口可以继承多个父接口(extends A,B),而类不可以。 接口中的变量类型都是省略了前缀的public final和public abstract型变量。 如果实现接口后重写变量,必须声明public。 类可以实现(implements)接口。但如果只实现了部分,则该类必须声明为抽象类。 interface It{ public static final int i = 20; public abstract void f(); } interface It2{ int i = 20; void f(); } class A implements It2{ public void f(){ System.out.printf("%d\n",i); } } public class Test1{ public static void main(String[] args){ A aa = new A(); aa.f(); } } //输出结果: 20 接口实现(implements)多态,不可以new接口对象,但可以定义一个接口引用类型的变量(接口变量)去指向实现接口的那个对象(类变量)。 interface It{ int i = 20; void f(); } class A implements It{ public void f(){ System.out.println("AAAA"); } } public class Test2{ public static void main(String[] args){ //It it2 = new It(); //error It it; it = new A(); //OK 即It it = new A(); it.f(); } } //输出结果: AAAA 实现(implements)接口只能调用从父接口实现过来的成员,不能调用子类所特有的。(JAVA自学课程笔记3第20行继承的关系) interface It{ int i = 20; void f(); } class A implements It{ public void f(){ System.out.println("AAAA"); } public void g(){ } } public class Test3{ public static void main(String[] args){ //It it2 = new It(); //error It it; it = new A(); //OK it.f(); it.g(); //error } } 包(package) package语句必须是第一条。 package aa.bb表示:把该文件中的所有的类放入aa.bb这个包中,并且该文件中所有类的真正名字将是包名和类名的组合。(例如:aa.bb.Test4)。 编译时使用javac -d.Test4.java而尽量不使用javac Test4.java,后者需要手动创建目录。(-d后的'.'是说明当前目录。) (查找包和设置classpath见笔记1第3行。) 不同的包中的类若想跨包相互引用,则必须声明该类为public并且将包名前缀写上。(如aa.bb.A aa = new aa.bb.A();)若想引用该类中的成员,则成员也必须声明为public。 如果想跨.java的源代码引用不同的类,可以在同目录编译完成的情况下直接new,当作写在同一个源代码.java文件当中。 导入(import) 将一个包内的所有类导入:import aa.bb.*; 将一个类导入:import aa.bb.Test5; 导入包后,若跨包引用类,原始类必须声明为public。若跨包使用类若跨包引用成员,原始成员必须声明为public。 内部类 只有内部类可以用protected和private修饰。外部类只能是public和非public(即不声明default)。 class A{ protected class B{ } } 归档工具jar包 将多个文件或目录合并压缩为单个Java归档文件。用于发布和使用类库,便于资源的组合和管理。 jar -cvf Name.jar * //把当前路径下所有的文件及文件夹下的所有内容(*)打包。 jar -tf Name.jar //在DOS下显示Name.jar这个包解压后的文件内容。 jar -xf D:\XX\Name.jar //把D:\XX\Name.jar中的内容解压到当前目录下。