• 抽象类于接口


                                            抽象类于接口

                  前面我们介绍了继承,子类继承父类 的非私有成员,在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需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

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

  • 相关阅读:
    七色花基本权限系统(6)- 让EntityFramework Code First自动合并/迁移/数据初始化
    koa 上传图片,上传文件,批量上传文件,批量上传图片...
    js 正则匹配标签,过滤标签不保留内容和过滤标签保留内容,过滤标签的的属性
    js 用xlsx读取excel、json_to_execl、excel_to_json导入导出
    css 心形动画 爱心动画
    NodeJs + koa2 + sequelize-auto + sequelize 搭建项目
    非框架, 纯原生JS “商品详情跳转到商品列表,并记录高度“ 的写法思路
    vue 渲染完成事件
    promise扩展一个stop方法
    vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标
  • 原文地址:https://www.cnblogs.com/jingyukeng/p/8687390.html
Copyright © 2020-2023  润新知