Java学习笔记之---比较接口与抽象类
Java学习笔记之---比较接口与抽象类
抽象类是描述事物的本质,接口是描述事物的功能
接口与抽象类的异同
1.一个类只能继承一个父类,但是可以有多个接口
2.抽象类中的抽象方法没有方法体,但是可以有非抽象方法;接口中的方法没有方法体,但是可以通过default或者static拥有方法体
3.如果子类不能重写父类中的抽象方法和接口中的方法,可以把子类变为abstract修饰的
4.子类重写父类的方法时形参不能改变,返回值类型不能改变
5.抽象类中可以包含构造函数,但是接口中不能出现构造函数
6.接口中只能定义静态常量,而抽象类中即可以定义静态常量属性,也可以定义普通属性
7.由default或者static修饰的接口内的方法可以不被子类重写,也可以有方法体
举一个例子:保温杯是水杯,所以水杯应该设计成抽象类,保温杯的功能是保温,所以保温应该设计为接口
实例:杯子类为抽象类,保温和喝为接口,保温杯为子类
public abstract class Cup {
private static String name;
private String color;
//抽象类中可以包含构造函数,但是接口中不能出现构造函数
public Cup(){
}
public Cup(String name,String color){
this.setName(name);
this.setColor(color);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public abstract void decorate();
//抽象类中的抽象方法没有方法体,但是可以有非抽象方法
public void lid(){
System.out.println("杯子有盖子");
}
}
public interface Drink {
//由default或者static修饰的接口内的方法可以不被子类重写,也可以有方法体
public default void eat(){
System.out.println("杯子可以喝水");
}
}
public interface Vacuum {
//接口中只能定义静态常量
static int i=1;
public void warm();
}
//一个类只能继承一个父类,但是可以有多个接口
public class VacuumCup extends Cup implements Drink,Vacuum{
public VacuumCup(){
}
public VacuumCup(String name,String color){
super(name,color);
}
@Override
//子类重写父类的方法时形参不能改变,返回值类型不能改变
public void decorate(){
System.out.println("装饰桌子");
}
@Override
public void warm(){
System.out.println("杯子可以保温");
}
}
class CupTest{
public static void main(String[] args){
Cup a=new VacuumCup("aa","red");
System.out.println(a.getName()+":"+a.getColor());
a.decorate();
((VacuumCup) a).warm();
a.lid();
}
}
运行结果:
aa:red
装饰桌子
杯子可以保温
杯子有盖子
Java学习笔记之---比较接口与抽象类的更多相关文章
- Java学习笔记:03面向对象-接口_多态
1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...
- 【Java学习笔记之二十一】抽象类在Java继承中的用法小结
一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...
- Java学习笔记——继承、接口、多态
浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...
- 【Head First Java 读书笔记】(八)接口与抽象类
接口是什么?它是一种百分之百纯抽象的类. 什么是抽象类?即无法初始化的类. 例如,我们设计一个animal类,以此类为父类,分别设计了多种动物子类,例如Lion,Tiger,Cat,Wolf,Do ...
- Java学习笔记(十)面向对象---接口
理解 初期理解 可以认为接口是一个特殊的抽象类.当接口中的方法都是抽象的,那么该类可以通过接口的形式来表示. class用于定义类 interface用于定义接口 格式特点 接口中常见定义:常量,抽象 ...
- 【Java学习笔记】Map接口的子接口---TreeMap
TreeMap,与TreeSet类似,可以对集合中的元素进行排序,同时保持元素的唯一性. 应注意,Comparable(实现接口,记得覆盖comparaTo方法),Comparator的使用. imp ...
- java学习笔记——Collection集合接口
NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 接口(抽象类)
接口描述了类的行为和功能,而不需要完成类的特定实现. C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念. 如果类中至少有一个函数被声明为纯虚 ...
- java学习笔记(1)——有关接口
接口: interface intf0{ public void doSomething(); } interface intf1{ public void doAnything(); } class ...
随机推荐
- 《Docker 实战》第三章 Docker Hub 寻宝游戏
# 秘密仓库和密码 docker run --rm -it --name password dockerinaction/ch3_ex2_huntanswer
- discuz电脑访问手机版域名怎么跳转到电脑版本
用discuz论坛访问手机版本的域名不会自动跳转到电脑版本,而是会跳转到域名+misc.php?mod=mobile体验很不好.现提供修改方法:打开论坛根目录找到文件./source/class/di ...
- vs2015 cordova环境安装【个人遇到的几个问题】
原文:vs2015 cordova环境安装[个人遇到的几个问题] 问题1: vs2015,设置 Debug Android 设备[真机调试] Exception in thread "m ...
- html send mail
<html> <body> <script> var formattedBody = "FirstLine \n Second Line \n Third ...
- 网络流量查看工具为 iftop
作者: daodaoliang 时间: 2016年5月23日 版本: v0.0.1 邮箱: daodaoliang@yeah.net 日常用的网络流量查看工具为 iftop, 但是他仅仅只能简单的查看 ...
- 零元学Expression Blend 4 - Chapter 9 用实例了解布局容器系列-「Canvas」
原文:零元学Expression Blend 4 - Chapter 9 用实例了解布局容器系列-「Canvas」 本系列将教大家以实做案例认识Blend 4 的布局容器,此章介绍的布局容器是Blen ...
- Windows下配置Redis,并修改密码
原文:Windows下配置Redis,并修改密码 Windows下配置Redis,并修改密码 下载 Redis Windows版本的GitHub链接,直接下载zip文件解压到指定文件夹下或者下载msi ...
- 基于VUE实现的新闻后台管理系统-一
基于VUE实现的新闻后台管理系统 前段时间拿到一个关于新闻后台的API,测试数据库使用SQLite,Restful服务是用Go写的,只要运行特定环境下的脚本(run.*)就会启动一个服务,依次后台为接 ...
- 百度网盘web端项目总结
项目背景 网盘作为一个在线备份存储,共享文件的工具类产品,给人们的工作和生活带来了很大的帮助和便利.百度网盘是目前国内使用量最大的网盘产品,至今发展已有4年,总用户数超4亿,为了让用户有着更好的使用体 ...
- 如何用C++操作无线网卡开启共享热点WiFi?
首先需要笔记本具备AP热点功能,记得写好的程序必须用管理员身份运行. 准备工作需要先做好 //查看是否支持的承载网络 netsh wlan show drivers //设置网络模式为allow ne ...