抽象类概述

抽象类的由来

  • 父类默认的eat方法已过时,所有子类都需要重写,所以将父类eat的方法体没有意义;
  • 但是每个动物都必须拥有eat功能,所以将父类eat定义成抽象方法。

抽象类的概念

包含抽象方法的类。用abstract修饰

抽象方法的概念

只有方法声明,没有方法体的方法。用abstract修饰

抽象方法的由来

当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类

代码演示

如果设置了抽象方法,改类也必须为抽象类,如Animal类

Dog类和Mouse类是进行了方法eat的重写

然后Test进行测试

抽象类的特点

  1. 修饰符:必须用abstract关键字修饰修饰符
abstract class 类名 {}
修饰符 abstract 返回类型 方法名 {}
  1. 抽象类不能被实例化,只能创建子类对象
  2. 抽象类子类的两个选择重写父类所有抽象方法定义成抽象类

抽象类成员的特点

成员变量:

可以有普通的成员变量 也可以有成员常量(final)

成员方法:

可以有普通方法,也可以有抽象方法 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类(或接口)

构造方法:

像普通类一样有构造方法,且可以重载

案例:定义员工之间的继承关系并使用

需求:

开发团队中有程序员和经理两种角色,他们都有姓名、工资、工号等属性,都有工作的行为,经理还有奖金属性。请 使用继承思想设计出上述需求中的类,并分别创建对象使用。

分析:

A:经理和程序员都是员工,把他们共同的属性和行为定义在父类Employee中,由于并不明确工作的具体内 容,所以父类中工作的方法定义为抽象的:name,salary,id;work();
B:定义经理类Manager,继承Employee,属性和行为: bonus; work();
C:定义程序员类Coder,继承Employee,属性和行为: work();
D:在测试类中分别创建对象并使用


员工类

package demo3;//父类, 员工类
public abstract class Employee {//成员变量//姓名private String name;//工资private double salary;//工号private String id;//构造方法public Employee() {}public Employee(String name, double salary, String id) {this.name = name;this.salary = salary;this.id = id;}//getXxx(), setXxx()public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public String getId() {return id;}public void setId(String id) {this.id = id;}//成员方法//工作public abstract void work();
}

程序猿类

package demo3;//子类, 程序猿类
public class Coder extends Employee {//小细节: 在实际开发中, 子类一般都有两个构造方法.//子类的空参构造访问父类的空参构造public Coder() { } //子类的全参构造访问父类的全参构造public Coder(String name, double salary, String id) {super(name, salary, id);}//方法重写@Overridepublic void work() {System.out.println("程序猿要敲代码");}
}

经理类

package demo3;//奖金private int bonus;//子类, 经理类
public class Manager extends Employee {public Manager() { }// 含参构造,因为经理多一个奖金,所以直接访问父类的全参构造时肯定没有bonus这个属性,因此这里要加上public Manager(String name, double salary, String id, int bonus) {super(name, salary, id);this.bonus = bonus;}public int getBonus() {return bonus;}public void setBonus(int bonus) {this.bonus = bonus;}@Overridepublic void work() {System.out.println("经理喝着茶翘着二郎腿看着程序猿写代码");}
}

测试类

package demo3;/*需求:开发团队中有程序员和经理两种角色,他们都有姓名、工资、工号等属性,都有工作的行为,经理还有奖金属性。请使用继承思想设计出上述需求中的类,并分别创建对象使用。父类Employeename,salary,id;work();程序员类Coder,继承Employee,属性和行为:work();经理类Manager,继承Employee,属性和行为:bonus; work();*/
public class Test {public static void main(String[] args) {//测试程序猿类Employee em = new Coder();em.work();//测试经理类Employee em2 = new Manager();em2.work();System.out.println("------------------");//扩展内容, 快速实例化对象//需求: 创建一个姓名叫张三, 工资为30000, 工号为: 研发部007的程序猿./* 这样写也行,但是太麻烦了Coder c = new Coder();c.setName("张三");c.setSalary(30000);c.setId("研发部007");*/Coder c = new Coder("张三",30000,"研发部07");System.out.println("姓名: " + c.getName());System.out.println("工资: " + c.getSalary());System.out.println("工号: " + c.getId());System.out.println("----------------------");//需求: 创建一个名字叫: 李四, 工资为: 40000, 工号为: 研发部01, 奖金为100000 的经理Manager m = new Manager("李四",40000,"研发部01",100000);System.out.println("姓名: " + m.getName());System.out.println("工资: " + m.getSalary());System.out.println("工号: " + m.getId());System.out.println("奖金: " + m.getBonus());}
}

面向小姐姐的编程——java面相对象之抽象相关推荐

  1. 面向小姐姐的编程——java面向对象之final、static关键字

    文章目录 final关键字 final的概念 final的作用 修饰类: 修饰变量: 总结 代码示例 static关键字 static的概念 static的作用 调用方式 static修饰成员变量 特点: ...

  2. 面向小姐姐的编程——JAVA面向对象之继承(三)

    文章目录 方法重写(Override) 定义: 解释: 注意事项: 使用场景: 例题 Java中的访问权限修饰符 案例:Java中四种访问权限演示 需求: 分析: 代码 总结 方法重写和方法重载的区别 ...

  3. 面向小姐姐的编程——JAVA面向对象之继承(二)

    文章目录 继承关系中子父类成员方法的使用 需求: 分析: 总结 继承关系中子父类构造方法的使用 需求: 分析: 含参构造与非含参构造 结论: 注 继承关系中子父类成员方法的使用 需求: 子父类中定义了 ...

  4. 面向小姐姐的编程——JAVA面向对象之继承(一)

    文章目录 继承概述 继承的概念 Java中的继承 格式(extends) 子类继承父类之后有什么效果? 注 继承的使用场景 向上抽取: 向下扩展: 继承的优缺点 程序设计的追求 耦合 内聚 继承关系中 ...

  5. 面向小姐姐的编程——JAVA面向对象之封装(一)

    文章目录 面向对象思想概述 什么是面向对象? 类与对象 现实中如何描述一个事物? Java中如何描述一个事物? 类的概念: 抽象 什么是对象? 类和对象的关系 类的定义和使用 创建一个对象并使用 创建 ...

  6. 面向小姐姐的编程——JAVA面向对象之多态

    多态概述 什么是多态? 多种状态,同一对象在不同情况下表现出不同的状态或行为 比如你女朋友,会有多种表情,多种姿态,多种情绪,这都是多态. Java中实现多态的步骤 要有继承(或实现)关系 要有方法重 ...

  7. 面向小姐姐的编程——JAVA面向对象之封装(二)

    文章目录 封装概述 什么是封装 封装的好处 Java中哪些内容体现了封装? Java中的封装体 private关键字 private的基本概念 特点 用法 扩展 this 关键字 this 的基本概念 ...

  8. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

  9. 一位读者小姐姐的阿里Java后台面经分享,快被问哭了!(附部分问题详解)

    我是 Guide 哥,一 Java 后端开发,半个全栈,自由的少年. 这篇文章是一位 女读者 (加粗!太难得)的面试阿里的经历分享,虽然第二面面完就失败了,但是这样的经历对自己帮助还是很大的. 下面的 ...

最新文章

  1. Codeforces Round 367 Div. 2
  2. ES6 你可能不知道的事 – 基础篇
  3. Nginx动态路由的新姿势:使用Go取代lua
  4. Yii2.0 数据库更新update
  5. MFC提示 未在此计算机上注册ActiveX控件“{648A5600-2C6E-101B-82B6-000000000014}“完美解决
  6. misc高阶 攻防世界_玄幻世界(修真、仙侠、奇幻、神话)修炼体系基础模型设定。...
  7. 【文件格式问题】文件格式 Windows、Unix/Linux、Mac 导致的问题及处理(idea 或 notepad++ 档案格式转换方法)
  8. 特斯拉员工入职3天就“偷”代码,悄悄备份6300多Python脚本
  9. OpenCV4Android JavaCameraView实现
  10. 了解你所不知道的SMON功能(五):Recover Dead transaction
  11. 用JWT来保护我们的ASP.NET Core Web API
  12. python 控件id_查看控件id的工具
  13. 使用CSS3改变文本选中的默认颜色
  14. samba服务器的搭建【在windows查看linux的共享文件】
  15. java 发布应用_发布java应用程序的步骤
  16. matebook14装鸿蒙系统,matebook14几个接口
  17. yolov5环境配置-Anaconda3 + Pytorch1.8 + Cuda10.2 + cuDnn8.2.0 + opencv3.2.0
  18. 凯立德导航 版本号意义解读
  19. css3boder-image属性使用
  20. 60级高阶督军套装属性_魔兽世界60年代法师套装大解析,最经典实用的果然是灵风套装...

热门文章

  1. 农行软开是总行编制吗_2021农行总行校招笔试来啦,你知道农行笔试都考些什么吗?...
  2. c++builder中dbgrid控件排序_如何实现APP中各种布局效果?学会这几个控件就够了...
  3. python如何读取数据时出现错误_在python3中,关于redis读取数据带有‘b’的问题...
  4. html 字显示效果,js原生文字一个一个显示效果
  5. linux进程泄露命令明文参数,sshpass 使Linux可以明文参数输入SSH密码(示例代码)
  6. AutoMapper使用
  7. Mac 安装 homebrew 流程 以及 停在 Updating Homebrew等 常见错误解决方法
  8. 谈一类神奇的数据结构——猫树
  9. javascript 函数整理
  10. JavaScript函数调用规则