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强大的面向对象的能力.他们两者之间对抽象概念 ...
随机推荐
- 【Ceph】Ceph学习理解Ceph的三种存储接口:块设备、文件系统、对象存储
文章转载自:https://blog.51cto.com/liangchaoxi/4048519
- CentOS7.9 yum方式安装redis最新版
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum --enablerepo=remi ins ...
- 通过开启swap分区来解决小内存阿里云服务器的内存瓶颈
swap分区大小设置 阿里云的linux云服务器默认是没有启用swap分区(交换分区)的.一般情况下swapswap分区的大小可以参考以下规则进行设定: 内存大小 swap大小 MEM_SIZE &l ...
- 部署AlertManager
部署Alertmanager Alertmanager和Prometheus Server一样均采用Golang实现,并且没有第三方依赖.一般来说我们可以通过以下几种方式来部署Alertmanager ...
- python动态参数
Python的动态参数有两种,分别是*args和**kwargs,这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别,实际上你可以使用*any或**whatever的方式. ...
- 如何在linux下检测(自身)IP冲突
最近遇到一个需求,或者说是一个用户现场问题. 我们设备先安装,设置dhcp模式获取ip进行联网,后来又安装了其他设备,但该设备是手动设置的静态ip地址,正好与我们设备冲突,造成网络故障. 那我们就需要 ...
- C#并发编程-2 异步编程基础-Task
一 异步延迟 在异步方法中,如果需要让程序延迟等待一会后,继续往下执行,应使用Task.Delay()方法. //创建一个在指定的毫秒数后完成的任务. public static Task Delay ...
- 鼠标悬停过度事件:Transition
CSS代码:<style> div{width:100px;height:100px;background:blue;transition: 0.5s;//0.5秒完成}div:hover ...
- core3商城DDD实战(一)建模
我所在学校部门的一个校园商城项目(学生售卖二手物品与发布悬赏求助等,在线上确认,校园内线下交易) 我们使用DDD的软件开发方法,这是我们进入编程世界上手的第二个项目,从创建仓库到现在已经过去二十多天, ...
- day45-JDBC和连接池01
JDBC和连接池01 1.JDBC概述 基本介绍 JDBC为访问不同的数据库提供了同一的接口,为使用者屏蔽了细节问题 Java程序员使用JDBC,可以连接任何提供了jdbc驱动程序的数据库系统,从而完 ...