面向小姐姐的编程——java面相对象之抽象
抽象类概述
抽象类的由来
- 父类默认的eat方法已过时,所有子类都需要重写,所以将父类eat的方法体没有意义;
- 但是每个动物都必须拥有eat功能,所以将父类eat定义成抽象方法。
抽象类的概念
包含抽象方法的类。用abstract修饰
抽象方法的概念
只有方法声明,没有方法体的方法。用abstract修饰
抽象方法的由来
当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类
代码演示
如果设置了抽象方法,改类也必须为抽象类,如Animal类
Dog类和Mouse类是进行了方法eat的重写
然后Test进行测试
抽象类的特点
- 修饰符:必须用abstract关键字修饰修饰符
abstract class 类名 {}
修饰符 abstract 返回类型 方法名 {}
- 抽象类不能被实例化,只能创建子类对象
- 抽象类子类的两个选择重写父类所有抽象方法定义成抽象类
抽象类成员的特点
成员变量:
可以有普通的成员变量 也可以有成员常量(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面相对象之抽象相关推荐
- 面向小姐姐的编程——java面向对象之final、static关键字
文章目录 final关键字 final的概念 final的作用 修饰类: 修饰变量: 总结 代码示例 static关键字 static的概念 static的作用 调用方式 static修饰成员变量 特点: ...
- 面向小姐姐的编程——JAVA面向对象之继承(三)
文章目录 方法重写(Override) 定义: 解释: 注意事项: 使用场景: 例题 Java中的访问权限修饰符 案例:Java中四种访问权限演示 需求: 分析: 代码 总结 方法重写和方法重载的区别 ...
- 面向小姐姐的编程——JAVA面向对象之继承(二)
文章目录 继承关系中子父类成员方法的使用 需求: 分析: 总结 继承关系中子父类构造方法的使用 需求: 分析: 含参构造与非含参构造 结论: 注 继承关系中子父类成员方法的使用 需求: 子父类中定义了 ...
- 面向小姐姐的编程——JAVA面向对象之继承(一)
文章目录 继承概述 继承的概念 Java中的继承 格式(extends) 子类继承父类之后有什么效果? 注 继承的使用场景 向上抽取: 向下扩展: 继承的优缺点 程序设计的追求 耦合 内聚 继承关系中 ...
- 面向小姐姐的编程——JAVA面向对象之封装(一)
文章目录 面向对象思想概述 什么是面向对象? 类与对象 现实中如何描述一个事物? Java中如何描述一个事物? 类的概念: 抽象 什么是对象? 类和对象的关系 类的定义和使用 创建一个对象并使用 创建 ...
- 面向小姐姐的编程——JAVA面向对象之多态
多态概述 什么是多态? 多种状态,同一对象在不同情况下表现出不同的状态或行为 比如你女朋友,会有多种表情,多种姿态,多种情绪,这都是多态. Java中实现多态的步骤 要有继承(或实现)关系 要有方法重 ...
- 面向小姐姐的编程——JAVA面向对象之封装(二)
文章目录 封装概述 什么是封装 封装的好处 Java中哪些内容体现了封装? Java中的封装体 private关键字 private的基本概念 特点 用法 扩展 this 关键字 this 的基本概念 ...
- Java开发知识之Java面相对象
Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...
- 一位读者小姐姐的阿里Java后台面经分享,快被问哭了!(附部分问题详解)
我是 Guide 哥,一 Java 后端开发,半个全栈,自由的少年. 这篇文章是一位 女读者 (加粗!太难得)的面试阿里的经历分享,虽然第二面面完就失败了,但是这样的经历对自己帮助还是很大的. 下面的 ...
最新文章
- Codeforces Round 367 Div. 2
- ES6 你可能不知道的事 – 基础篇
- Nginx动态路由的新姿势:使用Go取代lua
- Yii2.0 数据库更新update
- MFC提示 未在此计算机上注册ActiveX控件“{648A5600-2C6E-101B-82B6-000000000014}“完美解决
- misc高阶 攻防世界_玄幻世界(修真、仙侠、奇幻、神话)修炼体系基础模型设定。...
- 【文件格式问题】文件格式 Windows、Unix/Linux、Mac 导致的问题及处理(idea 或 notepad++ 档案格式转换方法)
- 特斯拉员工入职3天就“偷”代码,悄悄备份6300多Python脚本
- OpenCV4Android JavaCameraView实现
- 了解你所不知道的SMON功能(五):Recover Dead transaction
- 用JWT来保护我们的ASP.NET Core Web API
- python 控件id_查看控件id的工具
- 使用CSS3改变文本选中的默认颜色
- samba服务器的搭建【在windows查看linux的共享文件】
- java 发布应用_发布java应用程序的步骤
- matebook14装鸿蒙系统,matebook14几个接口
- yolov5环境配置-Anaconda3 + Pytorch1.8 + Cuda10.2 + cuDnn8.2.0 + opencv3.2.0
- 凯立德导航 版本号意义解读
- css3boder-image属性使用
- 60级高阶督军套装属性_魔兽世界60年代法师套装大解析,最经典实用的果然是灵风套装...
热门文章
- 农行软开是总行编制吗_2021农行总行校招笔试来啦,你知道农行笔试都考些什么吗?...
- c++builder中dbgrid控件排序_如何实现APP中各种布局效果?学会这几个控件就够了...
- python如何读取数据时出现错误_在python3中,关于redis读取数据带有‘b’的问题...
- html 字显示效果,js原生文字一个一个显示效果
- linux进程泄露命令明文参数,sshpass 使Linux可以明文参数输入SSH密码(示例代码)
- AutoMapper使用
- Mac 安装 homebrew 流程 以及 停在 Updating Homebrew等 常见错误解决方法
- 谈一类神奇的数据结构——猫树
- javascript 函数整理
- JavaScript函数调用规则