JavaSE_day06继承_多态_抽象类_接口

继承:

         继承的成员访问特点:     

                                  子类继承父类时,方法名称不相同时,分别调用即可;当成员方法名称一致时,先在子类中找,看是否有那个方法,如果有就调用子类的方法,如果没有就直接调用父类的成员方法。

方法重写:override,继承里边的技术。

         当子类出现和父类相同的方法时,子类会覆盖掉父类的方法,调用子类的功能。

方法重载:overload,方法里边的

         在方法中,出现多个方法名相同并且他们参数列表不同,与返回值无关

       参数列表不同分为:参数类型不同参数个数不同

final关键字:

        在实际开发中,有些方法不能直接覆盖掉,不想让子类重写父类的方法,那么就引出final关啊键字(可以修饰类,变量,成员方法)

      final的用法:

                           final可以修饰类,但是该类不能被继承

                          final可以修饰变量(成员变量,局部变量),但是该变量此时变成了一个常量。

                           final可以修饰成员方法,但是该方法不能被重写。

多态:某个事物在不同时刻体现出不同的状态。

    多态的前提:

                       1)必须有继承关系

                        2)必须方法重写(猫狗案例:里边每种动物吃的食物不同)

                         3)必须要有父类指向引用子类对象:     向上转型

                                       格式:         父类名     父类方法名=new 子类名();

   多态中的成员访问特点:

                      1)成员变量的访问特点: 编译看左,运行看左(父类) (用父类对象名调用子类的方法)

                      2)成员方法(一般没有静态修饰的都是非静态的)访问特点:编译看左,运行看右。

                      3)构造方法:作用就是给对象进行初始化。

                      4)静态的成员方法访问特点:编译看左,运行看左(静态成员方法不算方法重写,静态成员方法都和类有关)

多态的优点:

                     1)提高代码的扩展性(由多态保证)

                      2)提高代码的维护性(由继承保证)

多态的弊端:  不能访问子类特有的功能(方法)

               解决方案:向下转型,将父类的对象强制转换为子类的引用

                    格式: 子类名  子类对象名=(子类名)父类对象名;

                  出现异常:ClassCastException(类型转换异常)

抽象类:关键字abstract

        比如猫狗案例中,每种动物吃的食物都不一样,所以在当前类中只给出一个方法声明(没有具体的方法体)

      在一个类中给出一个抽象的功能(方法),那么这个类一定是抽象类。但是抽象类中可以有非抽象的方法

          抽象类的格式  :

                             abstract  class  父类名{

                           }        

         抽象方法的格式:

                       public  abstract(必须写)  方法()  ;注:没有方法体。

抽象类的特点:

                 1·  抽象类不能实例化(不能直接创建对象);

                  2·  子类必须重写父类的抽象功能    

  抽象类的子类:

           1·抽象类的子类如果是个抽象类,没有任何意义,因为就是要通过具体类来创建对象,而子类是抽象类的化,就不能创建对象

           2·抽象类的子类是具体类,那么创建对象就由子类完成:格式:      子类名  子类对象名=new  子类名();抽象类多态。

实际工作中:   接口多态,抽象类多态,具体类对象的创建。

抽象类的成员特点:

                  成员变量:可以是变量也可以是自定义的常量。

                 构造方法:作用就是给对象进行初始化       1)默认初始化               2)显示初始化

                 成员方法:可以是抽象的。也可以是非抽象的。

接口:将一些额外(扩展)的功能暴露出来,只要那个类实现了这个接口,就要去实现接口中的功能、

      格式:

                 interface  接口名{}

接口的子实现类: 

             1)接口的子实现类不能是抽象的,因为接口本身不能实例化,需要子实现类来进行实例化,而子实现类如果是抽象的接口,那么就没有意义。

              2)接口的子实现类是具体类    

             格式:       接口名   对象名=new   子实现类名();   接口多态(使用的比较多)

       实际开发中的命名规则:

                 实现类命名: 接口名+impl

接口的成员访问特点:

                 1)成员变量:存在默认的修饰符   public  static final

                  2)构造方法:接口中没有构造方法

                  3)成员方法:默认修饰符public  abstract (抽象的方法)

类与类,类与接口,接口与接口之间的关系:

   1)类与类之间是继承(Extends)关系:只支持单继承不支持多继承,但是支持多层继承。

   2)类与接口之间是实现(implements)关系:一个类继承一个类的同时可以实现多个接口(class Son extends Father  implements  Inter1,Inter2)

     3)接口和接口之间是继承(extends)关系:支持单继承,也支持多继承

例子:老师和学生案例,加入额外的抽烟功能。

  分析:从具体到抽象:

                老师类: (具体)

                           姓名,年龄,性别

                          构造方法:有参/无参

                           提供getXXX/setXXX公共访问方法

                          其他功能。

                 学生类:(具体)

                          姓名,年龄,性别

                          构造方法:有参/无参

                           提供getXXX/setXXX公共访问方法

                          其他功能

                 人类:(抽象) 

                          姓名,年龄,性别

                          构造方法:有参/无参

                           提供getXXX/setXXX公共访问方法

                          其他功能。

                  接口: 抽烟功能(抽象)

程序实现则是从抽象到具体:

先定义一个抽象的人类

 

 

 

你可能感兴趣的:(JavaSE_day06继承_多态_抽象类_接口)