继承、多态、抽象类、接口

继承

一、 基本概念
  继承是在一般类的基础上派生出反映特殊事物的类。特殊类继承一般类的数据成员和成员方法。

二、格式

class 父类A
{
    /*···*/
}
Class 子类B extends 父类A
{
    /*···*/
}

三、 作用
1. 可以简化类的定义,扩展类的功能
2. 大大增强了程序代码的可复用性,提高了软件的开发效率,降低了程序产生错误的可能性,为程序的修改扩充提供了便利(资源的复用)。

四、 限制
1. JAVA中只允许单继承和多层继承,不支持多重继承。
2. 子类不能直接调用父类私有属性,只能间接通过setter和getter方法调用私有属性。

五、 继承中的子类对象的实例化
1. 先调用父类构造,再调用子类构造(原因:在子类构造方法中隐含了一个super()来调用父类中的无参构造,来对继承自父类的成员做初始化操作)。

六、 Super关键字:方便调用被覆写后父类中的方法

  1. 作用:super关键字可以从子类中调用父类中的构造方法( super(参数) ), 普通方法(super.方法名)和 属性(super.属性名)。
  2. 特点:
    • super强调调用的方法是从父类中来的。
    • super在子类中使用!
    • super()调用构造方法必须放在构造方法的首行。
    • this()不能与super()同时存在于一个构造方法内。(this 调用构造方法也 必须放在构造方法的首行。)

多态性

一、 概念:允许程序出现重名现象。
二、 体现形式
1. 方法重载
2. 方法覆写:
2.1 概念
  子类中定义了与父类中同名的方法(方法名称,参数的类型,返回值类型全部相同)。
2.2 限制
  发生在继承类中
  被子类覆写的方法不能拥有比父类方法更加严格的访问权限。
  PS:方法覆写时从 private 到default 不算是覆写,而是重新定义了一个方法。
2.3 对象的多态性:子类对象可以与父类对象相互转换。
  向上转型:子类对象→父类对象;(自动)
  格式:父类A 父类对象a = new 子类实例B()
  PS:转型后调用的方法一定是被子类覆写过的方法。
  向下转型:父类对象→子类对象;(必须先发生向上转型)(强制)
  格式: 子类B 子类对象b = (子类B)父类实例a
  作用:
    对象多态性可以解决方法接受参数的问题。
    为抽象类和接口进行实例化。

三、 作用
  使程序的抽象程度和简捷程度更高,有助于程序设计人员对程序的分组协同开发。
四、 instanceof关键字
1. 判断一个对象到底是哪个类的实例
2. 格式:
  对象 instanceof 类 (返回boolean类型,true or false)
  向下转型时可以先进行判断再进行相应的转型操作。

五、 final关键字
1. 声明的类不能被继承
2. 声明的方法不能被子类覆写
3. 声明的变量变成常量,常量不可修改!(变量字母大写)由public static final关键字声明的变量为全局常量 。

抽象类

一、定义及规则

  1. 包含一个抽象方法的类必须是抽象类
  2. 抽象类和抽象方法都必须使用abstract关键字声明,
  3. 抽象方法只需要声明而不需要实现;(向上抽取,只抽取功能定义,不抽取功能主体)
  4. 抽象类必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法。

二、格式

abstract  class 抽象类名称A
{
属性;
普通方法;
抽象方法( 访问权限 abstract 返回值类型 方法名称(参数));
//抽象方法无方法体
} 

三、作用
1. 专门用来当父类,提供一个模版,根据模版的格式来修改并创建新的类。
2. 抽象类可以实现多个接口。
3. 模版设计,适配器设计(有选择性的覆写需要的方法)。

四、限制
1. 只能单继承
2. 不能直接由抽象类创建对象,只能由抽象类派生出新的类,由新的类来创建对象。
3. 必须通过对象的多态性来进行实例化操作。

接口

一、定义
  接口是一种特殊的类,里面全是由全局常量和公共抽象方法所组成
二、格式

interface 接口名称
{
全局常量;   //public static final 数据类型+(大写字母)
抽象方法;   //接口中的方法永远是public
}
class 子类 implements 接口A,接口B,接口C...
{
}

三、作用
1. 解决JAVA中单继承的局限问题,一个子类可以同时实现多个接口;
2. 派生接口不仅可以保留父类接口的成员,同时还可以加入新成员来满足实际需求。
3. 作为一个标准或者表示一种能力。
4. 工厂设计:程序在接口和子类之间加入一个过渡端(工厂类),通过此过渡 端取得接口的实例化对象。
5. 代理设计:指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题则负责其他相关操作。

四、限制
1. 接口要使用必须通过子类
2. 接口不能继承抽象类
3. 子类要覆写接口全部抽象方法

五、应用

  1. 继承抽象类实现接口
    格式:

    class 子类 extends 抽象类 implements 接口A,接口B...
    {
    }
  2. 抽象类实现接口
    格式:

    interface A
    {
    }
    abstract B implements A
    {
    }
  3. 接口的多继承:
    格式:

    Interface 子接口 extends 父接口A,父接口B...
    {
    }

六、原则
1. 一个类不要去继承一个已经实现好的类,只能继承抽象类或实现接口,如果抽象 类和接口都可以使用,那么优先使用接口来避免单继承的局限。

猜你喜欢

转载自blog.csdn.net/codefarmer__/article/details/80487906