java抽象类和接口

面向对象设计过程当中重要的一点是如何进行抽象,即把“问题空间”中的元素与“方案空间”中的元素创建理想的一对一的映射关系。抽象类和接口即是抽象过程当中的产物。java

 

    1、抽象类编程

    咱们知道,对象是经过类来产生的,可是并不是全部的类均可以描述具体的对象。设计模式

    若是一个类中不包含足够的信息来描述具体的对象,就成为了抽象类。抽象类是对一类有着相同特征,但细节上却有着不一样表现的对象的抽象。好比,鸟类都会叫,可是不一样的鸟叫法确定是不一样的,能够抽象出“叫”这个概念。微信

    定义下面一个鸟类:this

public abstract class Bird {spa

    private String color;设计

 

    public String getColor() {对象

        return color;继承

    }接口

    public void setColor(String color) {

        this.color = color;

    }

    public Bird(){

    }

    public abstract void sing();//鸣叫

}

//喜鹊

class  Magpie extends Bird{

public void sing() {

System.out.println("I can sing in a whisper. ");

}

}

抽象类特征:

(1)抽象类用abstract关键字修饰

(2)抽象类中的抽象方法用abstract关键字修饰,没有方法体(具体实现)。

(3)抽象类能够包含非抽象方法

(4)抽象类能够不包含抽象方法(设计成抽象类就没什么意义了吧。。。),但包含抽象方法的类必定是抽象类

(5)抽象类本质也是类,只能单继承

(6)抽象类不能实例化,不能new。咱们前面说过它不描述具体的对象,确定也不能实例化了

(7)抽象类能够有实例变量和构造方法

 

2、接口

    接口是一组方法特征的集合,是契约,规定了你能够作什么。软件设计过程当中要依赖抽象,而非具体实现。

    像咱们电脑上的usb接口,不管你是硬盘、u盘、仍是手机,只要你实现了usb规定的接口,便可以联通电脑。

    上面抽象类的例子中,我想加入一个“飞”的功能,考虑到并不是全部的鸟都会飞,好比:企鹅,鸵鸟,鸭子等等,该怎么办呢?

    修改抽象类确定是不合适的:一、违反开闭原则,2:会使得全部的子类都继承到“飞”这一功能,咱们会看到满天的鸭子在飞了^_^。

    咱们能够定义下面一个接口:

public interface IFly {

void fly();

 }

//喜鹊能够实现IBird中的接口:

 

class  Magpie extends Bird implements IFly {

public void sing() {

System.out.println("I can sing in a whisper. ");

}

        public void fly(){

            System.out.println("我会飞了!");

        }

}

    喜鹊实现了IFly中的fly接口,终于能够飞起来了。

    那若是须要给鸟类增长一个游泳的功能呢?本身去想。。。

接口的特征:

    (1)修饰符:public,abstract,default(不写)

    (2)关键字:interface

    (3)接口中的方法都是抽象方法,不能够有实现。

    (4)接口中的方法默认都是public abstract的,实现类中必须使用public修饰。

    (5)接口中的全部方法都必须在实现类(抽象类除外)中实现。

    (6)接口中的变量默认为public static final的。

    (7)一个类能够实现多个接口。

 

    3、应用场景

    1)抽象类体现的是“is a”的关系,若是某一些类的实现有共通之处,则能够抽象出来一个抽象类,让抽象类实现共通的代码,而个性化的方法则由各个子类去实现。 

    2)接口体现的是“like a”的关系,表现的是不一样类对象在行为上的抽象。好比飞机和鸟都会飞,能够抽离出飞的接口,但他们非同类。

    3)在软件设计中,当你须要接口与实现分离,封装变化的时候,面向接口编程显得尤其重要。

    好比Ioc思想,客户端不关心你具体是什么类,具体对象由容器来注入。

    再好比两个系统交互,良好的设计是双方提供接口,不关心内部实现,减小耦合性的同时,封装了变化。

    不少设计原则、设计思想以及设计模式都体现出面向接口编程的重要性:开闭原则,接口隔离,依赖倒置,适配器模式等等。

 

关注老姜谈技术,微信号:helojava,或者扫描下面二维码。

每日一帖,技术鸡汤。

相关文章
相关标签/搜索