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
",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:XXName.jar    //把D:XXName.jar中的内容解压到当前目录下。
原文地址:https://www.cnblogs.com/yinjx/p/14647886.html