文章目录

  • 抽象类和抽象方法
    • 抽象语法
    • 特点
    • 抽象类和抽象方法关系
    • 抽象类中是拥有构造方法的
  • 接口
    • 生活中的接口
    • 语法
      • 案例
    • 接口与类之间的关系
    • 接口和抽象类之间的对比
      • 案例
    • 接口的优势
    • 设计原则

抽象类和抽象方法

猫狗案例 - 猫和狗继承了动物类

具体的类 和 抽象的类的区别
动物都有吃饭的方法
动物都有睡觉的方法 动物吃什么
动物怎么睡觉动物具体吃什么 不知道(对于动物这个类而言,就是一个抽象的类)某一个具体的动物 吃什么猫吃鱼 狗吃骨头 羊吃草 狗趴着睡 马站着睡
动物这个类的睡觉的方法必须由子类动物来实现, 本身不需要实现,把本身不需要实现的方法称之为抽象方法

抽象方法 本身不需要 有方法体的方法, 就是抽象方法, 该方法不需要实现,由子类继承之后,重写实现

抽象方法所在的类就是抽象类

文具类 (抽象类)笔本铅笔刀
水果 (抽象类)苹果梨山竹

抽象语法

public abstract class fruit{// 抽象方法 (没有方法体 )public abstract void eat();
}

特点

  • 抽象类不能创建对象, 只能通过继承关系, 由子类去创建父类对象
  • 子类继承抽象类, 必须重写父类的所有抽象方法, 除非子类也是抽象类

抽象类和抽象方法关系

抽象方法所在的类 必须是抽象类

抽象类 可以没有抽象方法

有豪宅的人 一定是有钱人
有钱人 不一定有豪宅

抽象类中是拥有构造方法的

抽象类中可以 有普通属性,和普通方法

构造是给属性赋值使用的 , 抽象类有普通属性, 所以有给这些属性赋值的构造方法

接口

生活中的接口

键盘 鼠标 音响 U盘 是具有USB 功能的 设备

本身都具有自己的父类

键盘 继承 键盘类 (外设类) USB的功能 使用接口来描述 (接口也是一个功能)

接口从某种角度上来讲, 可以看做是一个特殊的抽象类,但是采用和抽象类完全不同的语法来表示, 两者的设计理念不同!
接口是功能的拓展

语法

public interface 接口名{成员属性;方法;
}

注意点

1- 和抽象类不同, 使用 interface 定义, 访问修饰符 必须是public
2- 成员属性必须是常量
-  成员方法必须是抽象方法
3- 实现接口使用 implements 来实现
4- 一个类可以实现多个接口

案例

// 定义USB 接口
public interface UsbInterface {// 常量 (默认修饰符 为 public static final)double SIZE = 1.5;// 具体的执行流程// 成员方法必须是抽象方法 (默认修饰符 public abstract)void service();
}
public class UDisk implements UsbInterface{@Overridepublic void service() {System.out.println("链接USB 接口 开始传输数据!");}
}
/*** USB  小风扇 实现了 USB的接口* 必须重写 接口中的所有抽象方法*/
public class UsbFan implements UsbInterface{@Overridepublic void service() {System.out.println("链接USB 获取电流 风扇开始转动!");}
}
public class Demo {public static void main(String[] args) {// 使用父接口 来接收子类对象 , 也是多态的一种实现方式UsbInterface uDisk = new UDisk();uDisk.service();UsbInterface uFan = new UsbFan();uFan.service();}
}

接口与类之间的关系

接口和接口之间可以相互继承

public interface A {void m1();
}
// 接口之间相互继承
public interface B extends A{
}

接口与类之间, 多实现

public class C  implements A,B{}

在继承的同时, 实现多个接口

public class D extends C implements A,B {}

类与类之间 相互继承

接口和抽象类之间的对比

1- 接口是一个特殊的抽象类, 要比抽象类更抽象2- 属性和方法
抽象类中可以有非抽象方法, 可以有普通成员属性
接口中 只有常量,抽象方法 3- 构造
抽象类存在构造方法, 接口中没有构造方法4- 编程思想
抽象类 (is a) 是一个 - 猫继承了动物类, 猫是一个动物
接口 (have a) 有什么 - 鼠标实现了USB , 鼠标有USB的功能 (功能拓展)5- 继承与实现关系
抽象类 继承关系, 只能单继承
接口 实现关系, 支持子类多实现

案例

猫狗案例
动物猫狗
/***************************************/
动物会英语的猫不会英语的猫会英语的狗不会英语的狗

接口的优势

  • 可扩展性
  • 避免单继承的弊端

设计原则

  1. 摘取代码中变化的行为, 形成接口
  2. 多用组合, 少用继承 (避免代码冗余)
  3. 针对接口编程, 不依赖于具体实现
  4. 开闭原则, 针对扩展开放,针对修改关闭

08- 抽象类和接口相关推荐

  1. Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类

    Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...

  2. C#中抽象类和接口的区别与使用

    一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...

  3. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上/下造型,main方法,抽象类,接口,设计模式,异常,内部类

    1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...

  4. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...

  5. Java面向对象编程——抽象类和接口

    Java面向对象编程--抽象类和接口 定义类的过程就是抽象和封装的过程,而抽象类与接口则是对实体类进行更高层次的抽象,进定义公共行为和特征. 抽象类: 如果一个类没有足够的信息去描述一个具体的对象,那 ...

  6. day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上_下造型,main方法,抽象类,接口,设计模式,异常,内部类

    1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...

  7. 不允许使用抽象类类型的对象怎么办_Java基础——面试官:你来说说抽象类和接口的区别...

    无论你是新手Java 程序员,还是老手程序员,可能在实际开发中很少自己写抽象类. 但是抽象类在某些时候的功能很强大,可以保证子类中百分百实现父类中的方法 -- 普通类的弊端,消除子类的冗余代码 -- ...

  8. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  9. C#中抽象类和接口的区别

    一.抽象类:       抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆 ...

  10. java中抽象接口_一篇文章让你彻底理解java中抽象类和接口

    相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方.往往这二者可以让初学者摸不着头脑,无论是在实际编程的时候,还是在面试的时候,抽象类与接口都显得格外重要!希望看完这篇博客文 ...

最新文章

  1. C++编译器会对没有构造函数的类生成默认构造函数吗?
  2. awbeci网站之技术篇
  3. excel文件直接双击打不开_实用电脑技巧excel 电脑办公技巧500招 高级电脑技巧
  4. mysql行列转换_Excel、SQL、Python分别实现行列转换
  5. phpstudy页面不存在_网站的404页面对于SEO的重要作用
  6. Spring Boot引起的“堆外内存泄漏”排查及经验总结
  7. script和scriptreplay命令实现终端录制和回放。
  8. hiveserver2的高可用HA
  9. 基本文件管理,针对Centos7的XFS文件系统备份恢复(需要更改)
  10. log添加 oracle redo_Redo Log之一:理解Oracle redo log
  11. Chrome(谷歌浏览器)插件资料 !
  12. 飞信的 SIP 协议分析
  13. mysql Incorrect string value \xF0\x9F\x98\x84\xF0\x9F
  14. 邓白氏编码官方查询地址
  15. ECLIPSE中添加TPTP插件
  16. MWC就快到来!5G、物联网应用以及折迭手机为本次焦点
  17. mysql未开启binlog恢复_无全量备份、未开启binlog日志,利用percona工具恢复delete的数...
  18. php手册下载打开没有内容,word保存了但是再打开就没有了怎么办
  19. 安卓Andriod使用入门(十九)【网络视频播放器】
  20. jrtplib库的使用

热门文章

  1. Redis ZSet类型简介
  2. 初学者如何快速入门Python,(内附详细攻略)
  3. A - Radio Station
  4. p5.js 绘制创意自画像(互动媒体技术作业)
  5. Java并发知识点小结
  6. 计算机应用软件安装教程,电视应用安装器安装软件图文教程
  7. 利用python爬取当乐网游戏评论简单数据分析
  8. android N上收到未接来电,没有LED灯闪烁提示,在M上是ok的.
  9. CSS 设置背景图片
  10. 手动输入,识别银行卡