[Java] Java自学笔记(四)——包与接口

*包
    ·定义
        在Java中,用包来管理类
        在同一个包中类名不能重名,在不同的包类名可以重名
    ·常用包
        java.lang                        java的语言包,自动导入
        java.util                        工具类
        java.in                            输入输出相关的类
        java.text                        文本类
        java.net                        网络类
        java.math                        数学类
    ·定义包
        ·使用package关键词定义包,package定义包的语言必须为源文件的第一条语句
        ·包名命名规则:公司域名的倒序.项目名.模块名.子模块名
        ·编译
            javac -d . 文件名.java
            javac -d参数可以指定生成字节码文件的位置
            .代表当前目录
            编译后,需用会在当前目录生成对应的文件夹,把字节码文件存储到该文件夹中
        ·运行
            java 完成类名
            java 包名.类名
*访问权限:
    ·权限最小化原则
    ·public
    ·protected
    ·private
*Object类中方法
    ·equals()——比较两个字符串是否相等
        判断两个变量是否相等,如果相等说明两个变量引用堆中的同一个对象
        如果想要判断对中两个对象的内容(各个成员变量是否一致),需要重写equals方法
        如果两个对象的equals相等,那么这两个对象的hashCode()也应该相等,即在重写equals方法的同时也要重写hasCode()
    ·getClass()——返回对象的字节码文件
    ·hashCode()——返回对象哈希码
    ·wait()——多线程中,让线程等待
    ·toString()——转换为字符串
        当打印对象时会调用toString()
        想要打印各个属性时,需要重写toString()
*final关键字
    可以修饰类,字段,方法,局部变量,形参
    ·final修饰类,表示为最终类,不能被继承
        System/String/Scanner就是final修饰的类
    ·final修饰字段不能重新赋值,必须显示的赋值,经常定义final字段的同时就初始化,也可以在构造方法中赋值
        final 和 static一般同时使用
    ·final修饰的方法,不能重写
    ·final修饰局部变量,一旦初始化,不能重新复制
        可以修改字段
*抽象类
    ·对一组对象进行更高层级的抽象,就可以定义为抽象类
    ·使用abstract修饰的类就是抽象类
    ·抽象类也是一种引用数据类型
        包含类、接口、数组、枚举
    ·抽象类不能实例化对象,引用必须赋值子类对象
        可以创造一个匿名内部类
    ·为什么定义抽象方法
        当一个类的操作无法具体实现时
    ·抽象类一般作为其他类的父类存在
*接口
    *接口的定义
        ·Java中接口就是功能的封装,用来拓展类的功能,接口也可以理解为一组操作规范或者一个协议
    *如何定义接口?
        ·[修饰符] interface 接口名{
            功能,用方法表示
        }
    *如何使用接口
        ·class 类 implement 接口{
            重写接口中的抽象方法
        }
        ·接口中方法默认使用public abstract 修饰,接口中还可以定义public static final变量,public static 方法,public default方法
        ·类实现了接口,需要重写接口的抽象方法,如果没有重写所有的抽象发放,实现类需要定义为抽象类
        ·接口是一种引用数据类型,可以定义变量,但是接口不能实例化对象,或者接口的匿名内部类对象。
        `接口多态,接口引用调用接口中的抽样方法,实际上执行的是实现类对象的方法,接口存在就是为了实现多态的
        ·一个类可以同时实现多个接口,需要重现所有抽象方法。
        ·接口也支持继承,接口支持多继承
    *接口与抽样类的异同
    *相同点:
        ·都可以定义抽象方法
        ·都不能实例化对象
        ·定义的抽样方法都需要被重写
    *不同点:
        *意义不同
            ·抽象类是对事物更高层级的抽象
            ·接口是对功能的封装
        *定义方式不同
            ·抽象类用 abstract class 定义
            ·接口用 interface 定义
        *内容不同
            ·抽象类中处了抽象方法外,还可以定义构造方法等普通类中定义的所有成员
            ·接口处了抽象方法等这是个内容外,不能定义构造方法等内容
        *使用方法不同
            ·抽象类需要被子类 extends 继承
            ·接口需要被实现类 implements 实现
        *类只支持单继承,接口支持多继承
        *应用场景不同
            ·对类进行功能的拓展优先选择接口
            ·除了扩展功能外,还需要保存不同的数据,只能选择抽象类;抽象类的抽象方法需要子类重写,抽象类还可以约束所有的子类都具有相同的功能
*接口的应用
    ·封装功能(操作)
        在Flyable中封装了fly()功能
    ·接口也可定义一组操作规范
        在开放某个项目时,在相似模块中一些操作是相同的,可以吧这一组相同的操作封装在一个接口中,就相当于通过接口定义了一个操作规范
*面向接口的编程
    ·一个类在继承父类的同时,可以实现多个接口
    ·接口容易拓展,接口的引用可以复制各种实现类对象,经常把接口引用作为方法形参,在调用方法时可以实现各种实现类对象。
    ·接口可以使项目分层
*类与类之间的关系
    ·泛化(继承)
        一个类继承另一个类,一个接口继承另一个接口
    ·实现
    ·关联
        如果A类使用B类定义了成员变量,A关联了B
    ·聚合
        一个A是若干个B组成,A不可以决定B的生命周期,A是一个聚合类
    ·依赖
        方法A的方法返回值类型,方法参数类型是另外一个B类,称A类依赖B类
    ·组合
        组合是关联的一种,如果一个类A由若干个B组成,而且可以决定B的生命周期,成A类为B的组合类

你可能感兴趣的:(Java)