1、概述
(1)只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。使用 abstract 修饰符来表示抽象方法和抽象类。
(2)abstract修饰符表示所修饰的类没有完全实现,还不能实例化。如果在类的方法声明中使用abstract修饰符,表明该方法是一个抽象方法,它需要在子类实现。如果一个类包含抽象方法,则这个类也是抽象类,必须使用abstract修饰符,并且不能实例化。
(3)注意,抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法。类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化。

2、抽象类特点
(1)抽象类不能实例化,即不能对其用new运算符;
(2) 类中如果有一个或多个abstract方法,则该类必须声明为abstract;
(3)抽象类中的方法不一定都是abstract方法,它还可以包含一个或者多个具体的方法;
(4)即使一个类中不含抽象方法,它也可以声明为抽象类;
(5)抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
(6)如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

3、什么情况下,使用抽象类
(1)类中包含一个明确声明的抽象方法;
(2)类的任何一个父类包含一个没有实现的抽象方法;
(3)类的直接父接口声明或者继承了一个抽象方法,并且该类没有声明或者实现该抽象方法。

4、代码展示
抽象类不能被实例化,抽象方法必须在子类中被实现。请看下面的代码:

import static java.lang.System.*;
public final class Demo{public static void main(String[] args) {Teacher t = new Teacher();t.setName("小明");t.work();Driver d = new Driver();d.setName("小陈");d.work();}
}
// 定义一个抽象类
abstract class People{private String name;  // 实例变量// 共有的 setter 和 getter 方法public void setName(String name){this.name = name;}public String getName(){return this.name;}// 抽象方法public abstract void work();
}
class Teacher extends People{// 必须实现该方法public void work(){out.println("我的名字叫" + this.getName() + ",大家好...");}
}
class Driver extends People{// 必须实现该方法public void work(){out.println("我的名字叫" + this.getName() + ",大家好...");}
}
/*
运行结果:
我的名字叫小明,大家好...
我的名字叫小陈,大家好...
*/

5、关于抽象类的几点说明
(1)抽象类不能直接使用,必须用子类去实现抽象类,然后使用其子类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例,也就是可以使用抽象类来充当形参,实际实现类作为实参,也就是多态的应用。
(2)构造函数和静态函数以及final修饰的函数不能使用abstract修饰符。
(3)如果试图创建一个抽象类的实例就会产生编译错误。
(4)如果一个类是非抽象类却包含一个抽象方法,就会产生编译错误。
(5)抽象类中有构造函数。如果抽象类是父类,需要给子类提供实例的初始化。

6、abstract 关键字和哪些关键字不能共存?
final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。

Java关键字之abstract(抽象类的概念和使用)相关推荐

  1. 继承extends ,this super final 关键字,abstract抽象类,override方法重写

    继承extends 私有成员不能被继承  总结:子类方法中,使用变量的原则是:就近原则 1 package review06; 2 /* 3 私有成员不能被继承 4 子类和父类有同名的成员变量:在子类 ...

  2. Java 关键字之abstract用法

    本篇文章主要分析abstract修饰符的用法,abstract和接口的比较以及常见的面试题. 文章部分内容来源于网络,转载请标明出处,并标记作者ID:Soinice abstract 简介 字面意思抽 ...

  3. Java 里的 abstract 和 final 关键字

    一. abstract abstract 的中文意思就是抽象的, 所谓抽象就是这个东西在现实里不存在, 也就是不能直接实例化的意思. abstract 可以修饰类, 类的方法 1.1 abstract ...

  4. 44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法

    作者:孙玉昌,昵称[一一哥],另外[壹壹哥]也是我哦 千锋教育高级教研员.CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 前言 经过前面几篇文章的讲解,我们现在已经对面向对象有了基本的认知, ...

  5. JAVA入门级教学之(abstract抽象类)

    目录 JAVA入门级教学之(abstract抽象类) 1.如何定义抽象类? 2.抽象类无法被实例化 3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的 4.抽象类中可 ...

  6. [转载] Java中的abstract关键字

    参考链接: Java中的abstract关键字 在Java中,一说到"抽象",肯定会想到abstract关键字,今天就来讲一下这个关键字. (1).在class前面添加abstra ...

  7. 解析java中的abstract关键字

    解析java中的abstract关键字 1 含义 abstract:抽象的;是java中用来修饰类和方法一个关键字 2 为什么要用 2.1 当我们不想类能够实例化时(类实例化没有意义,例如Animal ...

  8. 小白Java学习之路(abstract抽象类,final,接口,equals)

    常见面试题 final修饰静态常量进过方法 final 修饰的基本数据类型变量是无法进行修改的 final 修饰的引用类型的变量 只保证地址不变 对象中的内容可以发生改变 public class T ...

  9. Java关键字final、static、this、super使用总结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

最新文章

  1. Linux容器演变史
  2. Seq2Seq中Exposure Bias现象的浅析与对策
  3. 为什么要用MyBatis-Spring JDBC
  4. 流水线问题--计算机体系结构
  5. VS2010中使用gtest简单案例
  6. 视差滚动的爱情故事之优化篇
  7. java 打印出了对象_Java打印对象信息(二)
  8. 系统检测到您正在使用网页抓取工具访问_网站如何检测被爬虫?
  9. 金蝶云星空表单插件开发常用事件、方法、函数
  10. Runtime Error! R6025-pure virtual function call 问题怎么解决
  11. XRD测试的68个问题(一)
  12. python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time datetime模块...
  13. 洛谷 P3387(缩点后+处理 )
  14. Graphics Layer Tree创建
  15. spring boot 配置Filter过滤器
  16. 云队友丨张一鸣重在思考
  17. 杀病毒软件和防火墙区别
  18. 用户输入商品价格和商品数量,以及收货地址,可以自动打印订单信息 分析:
  19. .NET C# 判断用户是手机访问还是电脑访问
  20. 【计算机网络】考点总结

热门文章

  1. ssm图片上传前端Ajax
  2. selenium URL重定向检查
  3. Found GPU0 TITAN V which requires CUDA_VERSION = 9000 for optimal performance and fast startup time
  4. InDesign 主页模板技巧
  5. Android 集成支付的四部曲
  6. 如何让自己的Ipad连接到电脑,作为第二分屏
  7. Lua中获取字符串长度整理
  8. HTML技能点--使用base标签设置URL访问基准
  9. CentOS如何删除文件夹
  10. Adobe Acrobat 2023安装教程