Java关键字之abstract(抽象类的概念和使用)
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(抽象类的概念和使用)相关推荐
- 继承extends ,this super final 关键字,abstract抽象类,override方法重写
继承extends 私有成员不能被继承 总结:子类方法中,使用变量的原则是:就近原则 1 package review06; 2 /* 3 私有成员不能被继承 4 子类和父类有同名的成员变量:在子类 ...
- Java 关键字之abstract用法
本篇文章主要分析abstract修饰符的用法,abstract和接口的比较以及常见的面试题. 文章部分内容来源于网络,转载请标明出处,并标记作者ID:Soinice abstract 简介 字面意思抽 ...
- Java 里的 abstract 和 final 关键字
一. abstract abstract 的中文意思就是抽象的, 所谓抽象就是这个东西在现实里不存在, 也就是不能直接实例化的意思. abstract 可以修饰类, 类的方法 1.1 abstract ...
- 44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法
作者:孙玉昌,昵称[一一哥],另外[壹壹哥]也是我哦 千锋教育高级教研员.CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 前言 经过前面几篇文章的讲解,我们现在已经对面向对象有了基本的认知, ...
- JAVA入门级教学之(abstract抽象类)
目录 JAVA入门级教学之(abstract抽象类) 1.如何定义抽象类? 2.抽象类无法被实例化 3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的 4.抽象类中可 ...
- [转载] Java中的abstract关键字
参考链接: Java中的abstract关键字 在Java中,一说到"抽象",肯定会想到abstract关键字,今天就来讲一下这个关键字. (1).在class前面添加abstra ...
- 解析java中的abstract关键字
解析java中的abstract关键字 1 含义 abstract:抽象的;是java中用来修饰类和方法一个关键字 2 为什么要用 2.1 当我们不想类能够实例化时(类实例化没有意义,例如Animal ...
- 小白Java学习之路(abstract抽象类,final,接口,equals)
常见面试题 final修饰静态常量进过方法 final 修饰的基本数据类型变量是无法进行修改的 final 修饰的引用类型的变量 只保证地址不变 对象中的内容可以发生改变 public class T ...
- Java关键字final、static、this、super使用总结
一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...
最新文章
- Linux容器演变史
- Seq2Seq中Exposure Bias现象的浅析与对策
- 为什么要用MyBatis-Spring JDBC
- 流水线问题--计算机体系结构
- VS2010中使用gtest简单案例
- 视差滚动的爱情故事之优化篇
- java 打印出了对象_Java打印对象信息(二)
- 系统检测到您正在使用网页抓取工具访问_网站如何检测被爬虫?
- 金蝶云星空表单插件开发常用事件、方法、函数
- Runtime Error! R6025-pure virtual function call 问题怎么解决
- XRD测试的68个问题(一)
- python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time datetime模块...
- 洛谷 P3387(缩点后+处理 )
- Graphics Layer Tree创建
- spring boot 配置Filter过滤器
- 云队友丨张一鸣重在思考
- 杀病毒软件和防火墙区别
- 用户输入商品价格和商品数量,以及收货地址,可以自动打印订单信息 分析:
- .NET C# 判断用户是手机访问还是电脑访问
- 【计算机网络】考点总结