抽象类-Java

抽象类

  • 一、父类方法的不确定性
  • 二、抽象类介绍
  • 三、抽象类细节
  • 四、练习题

一、父类方法的不确定性

引入:对于一个动物,不知道它吃什么,比如猫吃鱼,兔子吃萝卜。动物类中的 eat 方法往往由它的子类去具体实现。

class Animal {public void eat() {System.out.println("我不是具体的动物,目前不知道吃什么。");}
}

父类方法的不确定性:
当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。

=> 所谓抽象方法就是没有实现的方法
=> 所谓没有实现就是指,没有方法体
=> 当一个类中存在抽象方法时,需要将该类声明为abstract类
=> 一般来说,抽象类会被继承,有其子类来实现抽象方法
在这里插入图片描述

二、抽象类介绍

  1. 用abstract关键字来修饰一个类时,这个类就叫抽象类。
访问修饰符 abstract 类名{
}
  1. 用abstract关键字来修饰一个方法时,这个方法就是抽象方法。
    抽象方法没有方法体
访问修饰符 abstract 返回类型 方法名(参数列表);  
  1. 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类。
  2. 抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多。

三、抽象类细节

AbstractDetail01.java

  1. 抽象类不能被实例化。[举例a. 见后文]
  2. 抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法。[举例b. 见后文]
  3. 一旦类包含了abstract方法,则这个类必须声明为abstract。
  4. abstract 只能修饰类和方法,不能修饰属性和其它的。
  5. 抽象类可以有任意成员【因为抽象类还是类】,比如:非抽象方法、构造器、静态属性等等。[举例c.]
  6. 抽象方法不能有主体,即不能实现。
  7. 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。[举例d.]
  8. 抽象方法不能使用 private、final 和 static 来修饰,因为这些关键字都是和重写相违背的。
    说明:
    ①父类的属性&成员为private,子类无法访问。
    ②final本意就是不希望子类来继承。
    ③static修饰的方法是静态方法,可以直接被类调用。而abstract修饰的方法是抽象方法,即无方法体的方法,不能被直接调用,需要在子类或实现类中去编写完整的方法处理逻辑后才能使用。
  • 举例

a.
在这里插入图片描述
b.

abstract class A {//抽象类不一定要包含abstract方法。// 也就是说,抽象类可以没有abstract方法// 还可以有实现的方法。String name;public void hi() {System.out.println("hi");}
}

c.
抽象类的本质还是类,所以可以有类的各种成员

abstract class C {public int num;public static String name = "haha";public void hi() {System.out.println("hi~");}public static void hello() {System.out.println("hello!");}public abstract void eat();
}

d.
这里相等于Mama子类实现了父类GrandMa的抽象方法,所谓实现方法,就是有方法体(方法体内具体实现不关心)。

abstract class GrandMa {public abstract void hi();public abstract void hello();
}
class Mama extends GrandMa{public void hi() {System.out.println("hi");}public void hello() {System.out.println("hello");}
}

四、练习题

  1. 题1,思考: abstract final class A()能编译通过吗,why?
  2. 题2,思考: abstract public static void test2();能编译通过吗,why?
  3. 题3,思考: abstract private void test3(); 能编译通过吗, why?

我的回答:
三个都不能
正确。

  1. 编写一个Employee类,声明为抽象类,包含如下三个属性:name,id,salary。提供必要的构造器和抽象方法:work()。对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。请使用继承的思想,设计CommonEmployee类和Manager类,要求类中提供必要的方法进行属性访问,实现work(),提示"经理/普通员工名字工作中.……"
public class AbstractExercise01 {public static void main(String[] args) {Manager sb = new Manager("sb", 38, 6000.5,100.0);CommonEmployee poor = new CommonEmployee("poor", 66, 5000.1);sb.work();poor.work();}
}abstract class Employee {private String name;private int id;private double salary;public Employee(String name, int id, double salary) {this.name = name;this.id = id;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}abstract public void work();
}class Manager extends Employee {public double bonus;public Manager(String name, int id, double salary,double bonus) {super(name,id,salary);this.bonus = bonus;}public void work() {System.out.println("Manager "+ this.getName() +" is sleeping···");}
}class CommonEmployee extends Employee {public CommonEmployee(String name, int id, double salary) {super(name,id,salary);}public void work() {System.out.println("CommonEmployee "+this.getName()+" is working···");}
}

在这里插入图片描述
和韩老师视频中的代码核对之后,改进的点:
CommonEmployee和Manager的work()方法上面写上 Override

 @Override

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/226268.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度人工智能培训第一天笔记

参加了百度人工智能初步培训,主要是了解一下现在人工智能的基本情况,以便后续看可以参与一些啥? 下面就有关培训做一些记录,以便后续可以继续学习。 一、理论基础部分 二、实际操作部分 主要学习的百度人工智能平台如下&#xf…

性能自动化测试?

一、思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力超负荷运行下的稳定性系统瓶颈 自动化测试 使用程序代替手工提升测试效率性能自动化 使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数,统计系统负载能力生成报告 2.Python中的性能…

Vscode中字符串报错:Unknown word.cSpell

一. 报错现象 二. 原因 是vscode IDE工具中的插件 Code Spell Checker 会检查字符串的合理性,我们写的中式拼音的字符串,不是一个标准英文单词,就会提示错误,解决方法就是让该插件遇到特定词汇不报错 三. 解决方法

NX二次开发UF_MTX3_initialize_z 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX3_initialize_z Defined in: uf_mtx.h int UF_MTX3_initialize_z(const double z_vec [ 3 ] , double mtx [ 9 ] ) overview 概述 Returns a 3x3 matrix with the given Z-d…

系列二十一、Spring中bean的创建顺序

一、概述 我们知道启动IOC容器时,Spring会为我们创建各种各样的bean,那么思考一个问题,bean的创建顺序是由什么决定的呢?答:bean的创建顺序是由BeanDefinition的注册信息决定的,这个其实很好理解&#xff0…

2023年【广东省安全员B证第四批(项目负责人)】证考试及广东省安全员B证第四批(项目负责人)复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2023年广东省安全员B证第四批(项目负责人)证考试为正在备考广东省安全员B证第四批(项目负责人)操作证的学员准备的理论考试专题,每个月更新的广东省安全员B证…

leetcode:2133. 检查是否每一行每一列都包含全部整数(python3解法)

难度:简单 对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵。 给你一个大小为 n x n 的整数矩阵 matrix ,请你判断矩阵是否为一…

Flask Session 登录认证模块

Flask 框架提供了强大的 Session 模块组件,为 Web 应用实现用户注册与登录系统提供了方便的机制。结合 Flask-WTF 表单组件,我们能够轻松地设计出用户友好且具备美观界面的注册和登录页面,使这一功能能够直接应用到我们的项目中。本文将深入探…

【详细版】基于AWS EC2使用Docker安装部署Superset v2.0

文章目录 1. SuperSet介绍2. 实验说明3. 实验配置4. SSH连接云实例5. 系统版本查看6. 主机名映射7. Docker安装[可选] Docker Compose安装8. 安装superset9. 初始化superset容器10. 为superset加入连接Athena需要的依赖11. 为superset准备一个具有权限的IAM用户12. 添加此IAM用…

解决企业异地组网混合办公网络挑战的最佳选择

在传统的网络架构中,企业在实现异地组网时面临着高昂的成本、低效的管理和有限的带宽等痛点。购买昂贵的专用线路和设备、手动配置和管理分布在不同地理位置的分支机构、以及无法满足高速数据传输需求的限制性带宽,给异地组网带来了困难和挑战。 案例背景…

微服务--03--OpenFeign 实现远程调用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 OpenFeign其作用就是基于SpringMVC的常见注解,帮我们优雅的实现http请求的发送。 RestTemplate实现了服务的远程调用 OpenFeign快速入门1.引入依赖2.启用…

删除链表的倒数第N个节点,剑指offerII(21),力扣

目录 题目地址: 题目: 相似类型题: 我们直接看本题题解吧: 解题方法: 难度分析: 解题分析: 解题思路(双指针): 代码实现: 代码说明: 代…