1. 抽象类概述

我们创建一个动物类,并且在这个类中创建动物对象,但是当你提到动物类,你并不知道我说的是什么动物,只有看到了具体的动物,你才知道这是什么动物,所以说动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物,同理我们也可以推理不同的动物,他们的行为习惯应该是不一样的,所以我们不应该在动物类中给出具体体现,而是给出一个声明即可。

抽象类定义:在 Java 中一个没有方法体的方法应该定义为抽象方法 而类中如果有抽象方法,则必须定义为抽象类

2. 抽象类的特点

  • 抽象类和抽象方法必须用关键字 abstract 修饰
  • 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
  • 抽象类不能实例化 -> 不加 {}
  • 抽象类的子类
  • 是一个抽象类
  • 是一个具体类,这个类必须重写抽象类中的所有抽象方法。(多态)

我们继续用猫狗案例来解释一下为什么要重写抽象类中的所有抽象方法。 “猫”和“狗”都是“动物”这个类的实体,比如动物都有eat() 这个方法,但是狗是吃肉的,猫是吃鱼的。所以每个动物关于具体吃的方式是需要在子类中重写的,不然的话,狗和猫不就一样了吗?

// Animal类
public abstract class Animal {public void sleep() {System.out.println("我趴着睡");}public abstract void eat();
}
// Dog类
public class Dog extends Animal {public Dog() {super();}@Overridepublic void eat() {System.out.println("我实现了父类方法,狗吃肉");}
}
// Cat类
public class Cat extends Animal{public Cat() {super();}@Overridepublic void eat() {System.out.println("我实现了父类方法,猫吃鱼");}
}
//测试类
public class AnimalTest {public static void main(String[] args) {Animal a1 = new Dog();a1.sleep();a1.eat();System.out.println("-------------------------");Animal a2 = new Cat();a2.sleep();a2.eat();}
}

运行结果:

我趴着睡
我实现了父类方法,狗吃肉
-------------------------
我趴着睡
我实现了父类方法,猫吃鱼

通过上面的例子我们可以看到,Dog 和 Cat 两个子类继承 Animal,两者 sleep()方法是一样的均继承于 Animal 类,而 eat() 方法由于特性不同则在Animal类中定义为抽象方法,分别在子类中实现。

3. 抽象类的几个小问题

  1. 抽象类有构造方法,不能实例化,那么构造方法有什么用?
  • 用于子类访问父类数据的初始化
  1. 一个类如果没有抽象方法,却定义为了抽象类,有什么用?
  • 为了不让创建对象
  1. abstract不能和哪些关键字共存
  • final 冲突
  • private 冲突
  • static 无意义

什么是抽象类?(简述)相关推荐

  1. 转专业菜鸡的秋招总结

    基础不牢 地动山摇 重拾基础 春招再战 写在前面 阿宾的高中成绩并不理想 现实不像小说 现实往往比小说更加精彩 进入12月,秋招基本收官,在结束了11月末的最后一场面试后,回顾总结了秋招的坎坷经历,悔 ...

  2. 作业05-继承、多态、抽象类与接口

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口,Comparable,Comparator 1.2 尝试使用思维导图将这些关键词组织起来. 1.3 可选:使用常规方法总结 ...

  3. 设计模式学习1:设计模式简述和设计模式原则

    设计模式简述 什么是设计模式? 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 设计模式的目的: 代码高可用(相同作用的代码能重复 ...

  4. 简述java规范要注意哪些问题_JAVA学习:JAVA基础面试题(经典)

    第一阶段题库 基础知识部分: 1. JDK是什么?JRE是什么? a) 答:JDK:java开发工具包.JRE:java运行时环境. 2. 什么是java的平台无关性? a) 答:Java源文件被编译 ...

  5. PyTorch框架学习八——PyTorch数据读取机制(简述)

    PyTorch框架学习八--PyTorch数据读取机制(简述) 一.数据 二.DataLoader与Dataset 1.torch.utils.data.DataLoader 2.torch.util ...

  6. java简述常见的布局极其特点_请简要说明 Android 中五种常见布局的特点。_学小易找答案...

    [简答题]请简要说明有序广播和无序广播的区别 [简答题]请简要说明 Android 程序结构中 AndroidManifest.xml 的功能? [简答题]简述李村站人工办理进路的作业过程. [简答题 ...

  7. Java动态代理简述

    Java动态代理简述 一.代理简介 代理一词含义十分宽泛,例如金融领域的股票发行代理.营销领域的销售代理.以及计算机领域中的代理设计模式等.尽管代理一词被使用的领域如此广泛,但是代理一词的大致的抽象含 ...

  8. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程...

    简述C#中IO的应用 在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.IO ...

  9. week05-继承、多态、抽象类与接口

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:继承 . 接口. 抽象类 . 多态 . Comparable接口 . Comparator接口 . interface关键字 ...

最新文章

  1. Django搭建简单的站点
  2. 在centos 下安装配置基于gitosis 的git 服务
  3. SQLServer之分离数据库
  4. 作为程序员,你会变身 TF boys 吗?
  5. 校园技术工坊丨云开发校园执行官招募开启!
  6. asp.net core web mvc之异常
  7. Python中is与==的使用区别详解
  8. 2013国家二级c语言上机考试点了编译并运行出现黑框闪退,2013年计算机二级C语言上机试题及解析2...
  9. RN PickerView组件
  10. JavaScript中的逗号运算符
  11. 360浏览器不能打开CSDN登陆页面
  12. php抓取微信图片,PHP使用CURL采集微信图片(公众号)如何绕过防盗链系统?
  13. app闪退后重启_iphone 开启App狂闪退?6个步骤即刻救援!
  14. 计算机科学第三讲——布尔逻辑和逻辑门
  15. 云大使推广的返利规则是什么
  16. SQL面试题整理_数据库知识点
  17. android手机如何关闭程序,安卓手机如何关闭防火墙
  18. 中台为什么做不好?拆系统“烟囱”容易,拆思维“烟囱”难!
  19. .py 与 Cython 的 .pxd .pyx .pyd 文件格式之间的主要区别
  20. 深度学习环境配置_ubuntu18及以上

热门文章

  1. 物联网卡和流量卡相比哪个信号强
  2. token失效 判断access_微信怎么判断微信accesstoken是否过期
  3. linux gt; gt;gt;区别,linux中amp;gt;什么意思? - 懂得
  4. bm算法好后缀 java实现_BM算法 | Depeng's Blog
  5. 中台战略-第四章、企业中台5大成功要素
  6. 小数保留两位小数,第三位四舍五入
  7. 华为中兴和中国政府可准备两项法律反击
  8. 百度账号管理静态页面
  9. 数据分析师 知识体系 业务篇
  10. skyeye linux qt,Ubuntu 16.04上安装SkyEye及测试