java抽象类的定义和使用

1. 抽象类的规则
● 抽象类不可以被实例化,也就是不能被new,会出现编译错误。抽象类如果想实例化可以通过非抽象子类的方式去实现。
● 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。而且抽象类中的抽象方法只能做方法声明,不能有具体的实现逻辑。
● 抽象类中的抽象方法,在非抽象子类中必须要实现。
● 构造方法、类方法(用static修饰的方法)不能声明为抽象方法。
2. 说明
一般是在设计阶段决定抽象类的使用,抽象类在业务中一般表示一种分类,而其子类这是该分类下的具体。例如 动物 分为 猫、狗等,在代码的实现时可以将 Animal 使用 abstract 修饰,而 Cat 、Dog两个类要继承Animal,如果Animal中有 abstract 修饰的方法,在 Cat 和 Dog必须要实现抽象方法。除非 Cat、Dog 也是使用 abstract修饰。
3. 代码实现
Animal.java
// 抽象类中才可以有抽象方法
public abstract class Animal {
private String name;
// 抽象方法,只需要在此声明即可
// 动物的行动方式
public abstract void action();
public void eat() {
System.out.println("动物都会吃东西");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
** Dog.java**
// 该类是 Animal 的非抽象子类,抽象方法必须要实现
public class Dog extends Animal {
public Dog() {
this.setName("狗");
}
// 此方法在 Aniaml中是非抽象方法,在 Dog 中不是必须重写的方法
@Override
public void eat() {
System.out.println("狗可以吃骨头");
}
// 此方法在 Aniaml中是 抽象方法,在 Dog 中必有具体实现
@Override
public void action() {
System.out.println("狗可以跑");
}
}
Cats.java
// 当 Animal 的子类同为抽象类的时候,抽象方法可以不用实现
public abstract class Cat extends Animal {
public Cat() {
this.setName("猫类");
}
}
抽象类 Animal 是不能直接使用new创建实例的,只能通过 实例化其非抽象子类
public static void main(String[] args) {
// 实例化方式
Animal dog = new Dog();
// 此种方式相当于直接创建一个 非抽象类,不是抽象类实例化的一种方式
Animal animal = new Animal() {
@Override
public void action() {
}
};
}
java抽象类的定义和使用的更多相关文章
- java中抽象类的定义和使用
java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础. 指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类 ...
- 【48】java抽象类和接口的定义和区别
首先看看他们的区别: 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力. ...
- java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)
抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...
- Java 抽象类与接口
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是 Java 语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予 Java 强大的面向对象的能力.他们两者之间对 ...
- java抽象类
Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...
- 浅谈java抽象类和接口
第一次,写这个,没有把图片放上来,有兴趣的可以点击连接看原文 http://note.youdao.com/noteshare?id=aecbd52b9240f23c0954e8086b848a17 ...
- Java接口、Java抽象类、C++抽象类的区别
由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...
- java抽象类与接口的区别及用法
java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...
- java 抽象类和接口
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...
- java抽象类和接口详解
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...
随机推荐
- 使用logstash同步Mysql数据表到ES的一点感悟
针对单独一个数据表而言,大致可以分如下两种情况: 1.该数据表中有一个根据当前时间戳更新的字段,此时监控的是这个时间戳字段 具体可以看这个文章:https://www.cnblogs.com/sand ...
- 制造企业有可能自行开发ERP系统吗?
当然可以啊! 生产企业对于ERP的需求是一直存在的,但市场上多为标准化的产品,与企业的个性化需求矛盾着. 有很多制造企业自行开发ERP系统啊!只是各个企业成效不同而已,毕竟不同企业的IT开发能力不同而 ...
- Module Federation 模块联邦 在Vue3中使用Vue2搭建的微服务
前言: 备注:本文基于对webpack Module Federation有一定了解的情况下 一般情况下使用模块联邦都是会使用相同的版本,如Vue2的组件时在Vue2中使用,但我为什么会在Vue3项目 ...
- Codeforces Round #804 (Div. 2) C(组合 + mex)
Codeforces Round #804 (Div. 2) C(组合 + mex) 本萌新的第一篇题解qwq 题目链接: 传送门QAQ 题意: 给定一个\(\left [0,n-1 \right ] ...
- IDEA生成带参数和返回值注释
步骤说明 打开IDEA进入点击左上角 - 文件 - 设置 - 编辑器 - 活动模板 新建活动模板 填写模板文本 编辑变量 添加变量表达式 设置模板使用范围-设置全部范围应用-或者设置只在Java代码中 ...
- 记一个深层的bug
1. 业务场景 产品需要每隔几天进行一次组件的更新,在自动化测试中,每隔30s检测一次更新源上的某个文件MD5值是否与本地一致,不一致代表有更新的版本,开始更新. 2. 问题出现 一个再平常不过的繁忙 ...
- 五、docker网络
一.Docker 网络 docker网络主要是解决容器联网问题,也是我们使用容器中最重要的一个环节,如果容器没有网络则无法向网络中提供服务. 网络管理命令:docker network [root@z ...
- 四、docker容器管理
一.docker容器管理 1.1 容器查看-ps命令 显示本地容器列表,但是默认不显示关闭的容器,只显示运行中的容器,除非加上命令选项 -a 用法:docker ps [-a 显示所有容器,默认只显示 ...
- pod(五):pod hook(pod钩子)和优雅的关闭nginx pod
目录 一.系统环境 二.前言 三.pod hook(pod钩子) 四.如何优雅的关闭nginx pod 一.系统环境 服务器版本 docker软件版本 Kubernetes(k8s)集群版本 CPU架 ...
- Ubuntu安装Docker及镜像加速器
一.安装Docker sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificate ...