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抽象类的定义和使用的更多相关文章

  1. java中抽象类的定义和使用

    java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础. 指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类 ...

  2. 【48】java抽象类和接口的定义和区别

    首先看看他们的区别: 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力. ...

  3. java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)

    抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...

  4. Java 抽象类与接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是 Java 语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予 Java 强大的面向对象的能力.他们两者之间对 ...

  5. java抽象类

    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...

  6. 浅谈java抽象类和接口

    第一次,写这个,没有把图片放上来,有兴趣的可以点击连接看原文 http://note.youdao.com/noteshare?id=aecbd52b9240f23c0954e8086b848a17 ...

  7. Java接口、Java抽象类、C++抽象类的区别

    由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...

  8. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  9. java 抽象类和接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

  10. java抽象类和接口详解

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

随机推荐

  1. Kubernetes 监控--Alertmanager

    前面我们学习 Prometheus 的时候了解到 Prometheus 包含一个报警模块,就是我们的 AlertManager,Alertmanager 主要用于接收 Prometheus 发送的告警 ...

  2. 常用的清理 Kubernetes 集群资源命令

    1. Kubernetes 基础对象清理 清理 Evicted 状态的 Pod kubectl get pods --all-namespaces -o wide | grep Evicted | a ...

  3. Elasticsearch:如何实现对 emoji 表情符号进行搜索

    转摘自:https://elasticstack.blog.csdn.net/article/details/114261636 Elasticsearch 是一个应用非常广泛的搜索引擎.它可以对文字 ...

  4. flask+gunicorn+nginx部署

    安装nginx和gunicorn yum install nginx pip3 install gunicorn flask项目配置 #main.py from flask import Flask ...

  5. 使用cnpm创建vue项目(含离线安装)

    # 全局安装淘宝cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org #升级 npm cnpm install npm ...

  6. Readsh中文版初始设置

    B站视频教程网址:https://space.bilibili.com/630285695/video 安装成功后,打开浏览器输入http://ip:5000如果出现如下画面,即告安装成功. 初始设置 ...

  7. 5_项目实战MyShop

    一. 网上商城 1.1 商城类别 B2B 商家对商家 B2C 商家对客户 C2C 客户对客户 O2O 线上线下相结合 1.2 商城常见模块 后台常见功能模块 商品管理 包括后台商品库存管理, 上货, ...

  8. C#/VB.NET 读取条码类型及条码在图片中的坐标位置

    我们在创建条形码时,如果以图片的方式将创建好的条码保存到指定文件夹路径,可以在程序中直接加载图片使用:已生成的条码图片,需要通过读取图片中的条码信息,如条码类型.条码绘制区域在图片中的四个顶点坐标位置 ...

  9. P1099 [NOIP2007 提高组] 树网的核 (树的直径)

    题目的意思就是在直径上找一段距离不超过s的路径,使该路径的偏心距最小. 求出直径之后,显然我们可以用双指针扫描一段合法路径.设u1,u2...ut是直径上的点,d[ui]表示从ui出发能到达的最远距离 ...

  10. python django超链接

    之前用django框架打了一个简易的博客网站,现在说说怎么用django做超链接. 本文基于之前讲解的博客应用,如果只想学超链接请自行删减代码或评论提问. 首先,在templates文件夹下添加det ...