抽象类于接口

                                        抽象类于接口

              前面我们介绍了继承,子类继承父类 的非私有成员,在java中还可以创建专门的类座位父类,这种类被称为抽象类,抽象类有点像模板,他只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法,比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢

于是我们有了抽象类的定义

抽象类定义的格式:

abstract class 类名 {

}

//研发部员工 
abstract class Developer {
    public abstract void work();//抽象函数。需要abstract修饰,并分号;结束
}

//JavaEE工程师
class JavaEE extends Developer{
    public void work() {
        System.out.println("正在研发淘宝网站");
    }
}

//Android工程师
class Android extends Developer {
    public void work() {
        System.out.println("正在研发淘宝手机客户端软件");
    }
}

这就是一个抽象类,有两个子类继承了她

 抽象类的特点:

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

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

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

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

抽象类就先说这么多,接下来我们看一下接口

                                                             接口

    可以把接口看作是抽象类的一个分支,接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

与定义类的class不同,接口定义时需要使用interface关键字。并且一个接口可以继承多个父类

interface Fu1{
    void show();
}
interface Fu2{
    void show1();
}
interface Fu3{
    void show2();
}
interface Zi extends Fu1,Fu2,Fu3{
    void show3();
}

这里可以使用extends关键字

class Fu {
    public void show(){}
}
interface Inter {
    pulbic abstract void show1();
}
class Zi extends Fu implements Inter {
    public void show1() {
    }
}

这里继承一个接口,所以要用关键字implements,并且父类也是接口类型

好了,我们来具体看一下抽象类和接口的区别

相同点:

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

2都不能直接实例化对象;

3都包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

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

2一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

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

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

二者的选用:

优先选用接口,尽量少用抽象类;

2需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

好了,接口和抽象类就介绍到这里

原文地址:https://www.cnblogs.com/jingyukeng/p/8687390.html