继承抽象类与接口

继承的概念:

    在现有类的基础上取创建一个新的类,新的类叫做子类,原先的类叫做父类。子类会自动拥有父类可继承的属性与方法。

    格式:class 子类 extends 父类

继承的好处:

    1:提高了代码的复用性。

    2:让类与类之间产生了关系,提供了多态的前提。

注意事项:

    只允许单继承,不允许多继承。

              class A{}

              class B{}

              class C extends A,B{}   不被允许。 

继承子父类中成员变量的特点:  

               子类访问成员变量,子类有用自己的,没有用父类的。父类中的成员变量是非私有的,子类中可以直接访问,若父类中的成员变量私有了,子类是不能直接访问的。当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用 关键字super来完成。super用来表示当前对象中包含的父类对象空间的引用。

    格式:super.父类中的成员变量。

继承子父类中的成员方法特点(重写):

    当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。

    成员方法特殊情况——覆盖子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。

方法重写的概念:

    在子父类中,子类中出现了与父类的返回值类型,方法名,形参列表,一模一样的方法就叫做放方法的重写,覆盖。

方法重写(覆盖)的应用:

    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

方法重写的注意事项:

    1:子类方法覆盖父类方法,必须要保证权限大于等于父类权限(public>protcted>default>private)。

    2:写法上稍微注意:必须一模一样:方法的返回值类型 方法名 参数列表都要一样。

    总结:当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法重写。

抽象类的概念:

    某些父类从子类抽取出来的相同的一些方法就叫做抽象类。

    格式:abstract class 类名 {}

    抽象类一定是个父类,不能和Private关键字共存。

抽象方法:

    分析事物时,发现了共性内容,就会向上抽取。只抽取方法声明,不抽取方法主体。 

    格式:public abstract 返回值类型 方法名(参数);

抽象类的特点:    

             1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。

             2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。

             3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

             之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单

 接口的概念:

    接口是功能的集合,本质上还是一个类,只描述应该具备的方法,并没有具体实现,没有方法体,是比类更为抽象的类。接口将功能的实现与定义分离,优化了程序设计。也就是说接口只有方法声明。

            定义格式:

    public interface 接口名 {

    抽象方法1;

    抽象方法2;

    抽象方法3;

    }     接口中的方法均为公共访问的抽象方法,接口中无法定义普通的成员变量。同时,接口中的方法全部用public abstaract 修饰,eclipse会自动补齐。可以省略不写。

类实现接口:

    类与接口的关系为实现关系,即类实现接口,其他类(实现类)实现接口后,就相当于声明“我应该具备这个接口中的功能。”实现类仍然需要重写方法实现以实现具体的功能。

    格式:

    class 类 implements 接口 {

      重写接口中方法

    }    也就是说在接口中只是声明功能,在类中则是具体实现了这个功能。

    类和类之间的关系:一定是单继承关系。
       类和接口之间的关系:实现关系(类实现接口)implements。
       接口和接口之间的关系:继承关系(可以多继承),接口 extends 接口。

接口中成员的特点:

    1:接口中可以定义变量,但是必须有固定的修饰符修饰,public static final 数据类型 变量名。

    public :公共的,任何人在任何地方都可以使用。

    static:被static修饰的成员变量,方法。都可以用类名.成员名调用。

    final:最终的,被final修饰的量叫做常量,一次赋值,终身不变。

    2:接口中也可以定义方法,固定的修饰符,public abstract

    3:接口不可以创建对象。

    4:子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类就是一个抽象类。

接口的多实现:

      接口最重要的体现,解决多继承的弊端。因为多继承时,父类有相同的功能(方法)时,子类调用会产生不确定性。也就是说多继承父类时,功能有主体,而导致运行时,不确定运行那些内容。也就是说因为接口中的功能都没有方法体,由子类确定。

类继承类同时实现接口:

      当一个子类已经继承了父类,又需要扩展额外的功能,这是就可以通过接口来实现。接口的出现避免了单继承的局限性,也就是说父类定义的基本功能,接口定义事物的扩展功能。

接口的多继承:

      接口可以多继承,通过关键字extends来实现。也就是说由于接口中的方法时抽象方法,没有方法内容,也就是{ },子类实现后也不会发生调用的不确定性。

接口的好处:

      1:接口的实现扩展了功能。

      2:接口其实就是暴露出来的规则。

      3:接口的出现降低了耦合性,及设备与设备之间实现了解耦。

接口与抽象类的区别:

      相同点:

          1:都位于继承的顶端,用于被其他类实现或继承。

          2:都不能直接实例化对象。

          3:都可以包含抽象方法,其子类必须覆写这些方法。

      不同点:

          1:抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性,接口只能包含抽象方法。

          2:一个类只能继承一个直接父类(如抽象类),却可以实现多个接口。

          3:抽象类是这个事物中应该具备的内容,继承体系是  is a  的关系。

          4:接口是这个事物中额外的内容,继承体系是一种like a的关系。

    二者的选用,优先选择接口类,需要定义子类的行为,又要为子类提供共性功能时,才选用抽象类。

posted @ 2020-09-25 10:56  马雪峰1  阅读(258)  评论(0编辑  收藏  举报