08- 抽象类和接口
文章目录
- 抽象类和抽象方法
- 抽象语法
- 特点
- 抽象类和抽象方法关系
- 抽象类中是拥有构造方法的
- 接口
- 生活中的接口
- 语法
- 案例
- 接口与类之间的关系
- 接口和抽象类之间的对比
- 案例
- 接口的优势
- 设计原则
抽象类和抽象方法
猫狗案例 - 猫和狗继承了动物类
具体的类 和 抽象的类的区别
动物都有吃饭的方法
动物都有睡觉的方法 动物吃什么
动物怎么睡觉动物具体吃什么 不知道(对于动物这个类而言,就是一个抽象的类)某一个具体的动物 吃什么猫吃鱼 狗吃骨头 羊吃草 狗趴着睡 马站着睡
动物这个类的睡觉的方法必须由子类动物来实现, 本身不需要实现,把本身不需要实现的方法称之为抽象方法
抽象方法 本身不需要 有方法体的方法, 就是抽象方法, 该方法不需要实现,由子类继承之后,重写实现
抽象方法所在的类就是抽象类
文具类 (抽象类)笔本铅笔刀
水果 (抽象类)苹果梨山竹
抽象语法
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- 继承与实现关系
抽象类 继承关系, 只能单继承
接口 实现关系, 支持子类多实现
案例
猫狗案例
动物猫狗
/***************************************/
动物会英语的猫不会英语的猫会英语的狗不会英语的狗
接口的优势
- 可扩展性
- 避免单继承的弊端
设计原则
- 摘取代码中变化的行为, 形成接口
- 多用组合, 少用继承 (避免代码冗余)
- 针对接口编程, 不依赖于具体实现
- 开闭原则, 针对扩展开放,针对修改关闭
08- 抽象类和接口相关推荐
- Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类
Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...
- C#中抽象类和接口的区别与使用
一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...
- day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上/下造型,main方法,抽象类,接口,设计模式,异常,内部类
1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...
- Java面向对象编程——抽象类和接口
Java面向对象编程--抽象类和接口 定义类的过程就是抽象和封装的过程,而抽象类与接口则是对实体类进行更高层次的抽象,进定义公共行为和特征. 抽象类: 如果一个类没有足够的信息去描述一个具体的对象,那 ...
- day03--java基础编程:面向对象,构造方法,代码块讲解,this super,static,final,访问修饰符,方法重写,向上_下造型,main方法,抽象类,接口,设计模式,异常,内部类
1 Day06–面向对象1 1.1 面向对象 1.1.1 概念 推荐看的书:Thinking in java 概念:所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的 ...
- 不允许使用抽象类类型的对象怎么办_Java基础——面试官:你来说说抽象类和接口的区别...
无论你是新手Java 程序员,还是老手程序员,可能在实际开发中很少自己写抽象类. 但是抽象类在某些时候的功能很强大,可以保证子类中百分百实现父类中的方法 -- 普通类的弊端,消除子类的冗余代码 -- ...
- php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析
本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...
- C#中抽象类和接口的区别
一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆 ...
- java中抽象接口_一篇文章让你彻底理解java中抽象类和接口
相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方.往往这二者可以让初学者摸不着头脑,无论是在实际编程的时候,还是在面试的时候,抽象类与接口都显得格外重要!希望看完这篇博客文 ...
最新文章
- C++编译器会对没有构造函数的类生成默认构造函数吗?
- awbeci网站之技术篇
- excel文件直接双击打不开_实用电脑技巧excel 电脑办公技巧500招 高级电脑技巧
- mysql行列转换_Excel、SQL、Python分别实现行列转换
- phpstudy页面不存在_网站的404页面对于SEO的重要作用
- Spring Boot引起的“堆外内存泄漏”排查及经验总结
- script和scriptreplay命令实现终端录制和回放。
- hiveserver2的高可用HA
- 基本文件管理,针对Centos7的XFS文件系统备份恢复(需要更改)
- log添加 oracle redo_Redo Log之一:理解Oracle redo log
- Chrome(谷歌浏览器)插件资料 !
- 飞信的 SIP 协议分析
- mysql Incorrect string value \xF0\x9F\x98\x84\xF0\x9F
- 邓白氏编码官方查询地址
- ECLIPSE中添加TPTP插件
- MWC就快到来!5G、物联网应用以及折迭手机为本次焦点
- mysql未开启binlog恢复_无全量备份、未开启binlog日志,利用percona工具恢复delete的数...
- php手册下载打开没有内容,word保存了但是再打开就没有了怎么办
- 安卓Andriod使用入门(十九)【网络视频播放器】
- jrtplib库的使用