day14-包装类-抽象方法和抽象类-模板方法设计模式-接口的定义和使用

25 篇文章 0 订阅
7 篇文章 0 订阅

八大基本数据类型的包装类都使用final修饰,都是最终类,都不能被继承.

public  class IntWapper{
      private   int  value;//值
      public  IntWapper(int value){
              this.value   =  value;
      }
      //包含int类型相关的算法
     把十进制转换2进制/8进制/16进制
}
  1. 装箱操作使用的是Xxx.valueOf的方式,而不是直接new xx.
  2. switch支持的数据类型:byte,short,char,int,也支持对应的包装类. 为何?
        就是在底层,switch中会对包装类做手动拆箱操作.
  3. 在Java的集合框架中,只能存储对象,不能存储基本类型值.
  4. 解释Object obj = 17;  
        1):自动装箱:   Integer  i = 17;
        2):引用的自动类型转换,把子类对象赋给父类变量:   Object obj = i;  

  5. Object数组:Object[]该数组可以装一切数据类型. Object[] arr = {“A”,12,3.14,true};

  6. 包装类的常用操作方法:
    1:包装类中的常量:
          MAX_VALUE/MIN_VALUE/SIZE(在内存中存储占多少位)/TYPE(对应的基本类型)
    2:包装类的构造器,xxx类型的包装类Xxx:(xxx表示8大基本数据类型).
       Xxx(xxx value):接受自己的基本类型值,如Integer(int val)/Boolean(boolean val)
       Xxx(String value): 但是,Character除外.
       构造器的作用:创建包装类对象.
    3:基本类型和包装类型的转换(装箱和拆箱). new Xxx() ,Xxx.valueOf() ;拆箱:Xxx.xxxValue()
       装箱:
                  Integer i1 = new Integer(123);
                  Integer i2 = Integer.valueOf(123);//推荐,带有缓存.
       拆箱:
                  int val = i1.intValue();

    4:String和基本类型/包装类型之间的转换操作:

        把String转换为包装类类型:
        方式1: static Xxx  valueOf(String str) 
             Integer i1 = Integer.valueOf(“123”);
        方式2: new  Xxx(String str):
             Integer i2= new Integer(“123”);
         把包装类对象转换为String.
            String  str =  任何对象.toString();
        把基本数据类型转换为String:
            String  str = 17 + ””; String.valueOf();
        把String转换为基本数据类型:
          static xxx parseXxx(String s)  
          String  input=”12345”;
          int num = Integer.parseInt(input);
    5:Boolean b = new Boolean("SB");//false
               只认可true/TRUE,为true,其他都是false.

  7. 包装类中的缓存设计(享元模式),本质就是缓存设计:
    Byte、Short、Integer、Long:缓存[-128,127]区间的数据;
    Character:缓存[0,127]区间的数据;

    包装类型对象之间的比较操作:统统使用equals方法来做比较,比较的是包装的数据.底层做拆箱了,再比较值

    5): 方法中的,基本类型变量存储在栈中,包装类型存放于堆中.

  8. 使用abstract修饰且没有方法体(无{})的方法,称为抽象方法。
    ① 使用抽象abstract修饰,方法没有方法体,留给子类去实现/覆盖。
    抽象方法修饰符不能是private 和 final以及static,为什么?
    抽象方法必须定义在抽象类或接口中。
    ---------------------------------------------------------------------------------------------
    使用abstract关键字修饰的类。
    ① 不能创建实例即不能new一个抽象类。
    ② 可以不包含抽象方法,若一旦包含,该类必须作为抽象类,抽象类可以包含普通方法(留给子类调用的),抽象类是有构造器的,子类构造器必须先调用父类构造器。
    若子类没有实现/覆盖父类所有的抽象方法,那么子类也得作为抽象类(抽象派生类)。
    ④ 构造方法不能都定义成私有的,否则不能有子类(创建子类对象前先调用父类构造方法)。
    ⑤ 抽象类不能使用final修饰,因为必须有子类,抽象方法才能得以实现。
    ⑥ 是不完整的类,需作为父类(必须要有子类),功能才能得以实现。
    抽象类:一般的,我们起名,习惯使用Abstract作为前缀,让调用者一看就知道是抽象类.
    抽象类可以不存在抽象方法,为防止外界创建对象,所以我们会发现有些工具类没有抽象方法,但是也使用abstract来修饰.
    ---------------------------------------------------------------------------------------------
    抽象类和普通类的区别:
       普通类有的成员(方法,字段,构造器),抽象类都有.  抽象类不能创建对象,抽象类中可以包含抽象方法.

  9. 模板方法设计模式:在父类的一个方法中定义一个总体算法的骨架(模板方法),而将某一些步骤延迟到子类中,因为不同的子类实现细节不同。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
    -------------------------------------------------------------------------------------------------------------
    抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现。
    抽象父类至少提供的方法:
    模板方法:一种通用的处理方式,即模板(总体算法的骨架);
    抽象方法:一种具体的业务功能实现,由子类完成;                                                                    

     Java中的接口表示规范,用于定义一组抽象方法,表示某一类事物必须具备的功能,要求实现类必须来实现该接口并提供方法实现.不关心这些类的内部数据和其功能的实现细节。增强了系统的可拓展性和可维护性。
    ------------------------------------------------------------------------------------------------
    定义接口语法:    [public]   interface   接口名{},
           成功编译之后,和类一样,具有一份字节码.
    ------------------------------------------------------------------------------------------------
    接口存在的成员:
         1):接口中没有构造器,接口不能创建对象(不能 new ),接口中不能定义普通方法.
         2):接口中定义的成员变量,实质是全局静态常量,默认使用  public static final来修饰.
         3):接口中定义的方法都是公共的抽象方法,默认的使用  public abstract 来修饰方法.
                  public abstract void walk();   一般的,我们在接口中定义方法,不喜欢使用修饰符.
         4):接口中定义的内部类都是公共的静态内部类,默认使用public  static来修饰内部类.
                  public static interface ABC{}         
    ------------------------------------------
    常量接口:因为默认使用  public static final来修饰变量。有人喜欢使用接口来封装多个常量信息,(不推荐).

  10. 接口的特点:
    没有构造方法,也不能显示定义构造器,不能实例化。
    ② 接口只能继承接口,不能继承类,且接口支持多继承(类是单继承关系)。
              [修饰符] interface  接口名   extends   接口1,接口2
    ③ 接口里的方法全是公共抽象的,默认修饰符是public abstract。
    ④ 接口里的字段全是全局静态常量,默认修饰符是public static final。
    ⑤ 接口里的内部类全是公共静态的,默认修饰符是public static。

    ---------------------------------------
    类和类之间存在是继承关系:                                 使用extends 来表示.
    接口和接口之间只能是继承关系:                        使用extends 来表示.
    接口和实现类之间只能是实现关系(继承关系),使用implements来表示.

  11. 接口的实现者:实现类.
    -----------------------------------------------------------------------------------------------
    接口和实现类之间的关系,严格上称之为”实现关系”, 特殊继承关系.
    面向接口编程:
                    接口  变量 =   创建实现类对象;//体现了多态思想
                    接口和实现类的多态关系才是我们见的最多的.
    -----------------------------------------------------------------------------------------------
    类实现接口的语法:  一个类可以实现多个接口,从而也弥补了类的单继承问题.
    [修饰符] class   实现类名   extends  父类 implements 接口1,接口2{}

    注意:
    接口中的方法是公共的抽象的,所以实现类必须覆盖接口中的方法,并且方法必须使用public修饰.

  12. 接口和抽象类的区别:
    相同点:
    1):都位于继承的顶端,用于被其他实现或继承。
    2):都不能实例化。
    3):都可以定义抽象方法,其子类/实现类都必须覆写这些抽象方法。  
    不同:
    1):接口没有构造方法,抽象类有构造方法。
    2):抽象类可包含普通方法和抽象方法,接口只能包含抽象方法(Java8之前);
    3):一个类只能继承一个直接父类(可能是抽象类),接口是多继承的并且只支持一个类实现多个接口(接口弥补了Java的单继承)。
    4):成员变量:接口里默认是public static final,抽象类是默认包权限。
    5):方法:接口里默认是public abstract,抽象类默认是默认包访问权限。
    6):内部类:接口里默认是public static,抽象类默认是默认包访问权限。
    -----------------------------------------------------------

    面向接口编程: 多态的好处:把实现类对象赋给接口类型变量,屏蔽了不同实现类之间的实现差异,从而可以做到通用编程.

     

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值