java基础(十一)之抽象类和抽象函数
2024-09-04 22:57:21
1、抽象函数的语法特征
2、抽象类的语法特征
3、抽象类的作用
抽象函数
只有函数的定义,没有函数体的函数被称为抽象函数;
abstract void func();
抽象类
使用abstract定义的类称为抽象类。
abstract class Person{}
注意:
1、抽象类不能够生成对象;
2、如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象类。
3、如果一个类当中没有抽象函数,这个类也可以被声明为抽象类。
下面来用一个例子说明下:
Person.java:
abstract class Person{
String name;
int age; void intruduce(){
System.out.println("My name is" + name + ",my age is " + age);
}
abstract void eat(); }
Chinese.java
class Chinese extends Person{
void eat(){
System.out.println("use chopsticks.");
}
}
Test.java:
public class Test{
public static void main(String[] args){
Person p = new Chinese();
p.eat(); }
}
输出结果:
PS C:\Users\admin\Desktop\java_code\练习八> java Test
use chopsticks.
抽象类可以有构造函数
Person.java
abstract class Person{
String name;
int age;
Person(){
System.out.println("Person");
}
void intruduce(){
System.out.println("My name is" + name + ",my age is " + age);
}
abstract void eat(); }
Chinese.java
class Chinese extends Person{
Chinese(){
System.out.println("Chinese");
}
void eat(){
System.out.println("use chopsticks.");
}
}
输出结果:
PS C:\Users\admin\Desktop\java_code\练习八> java Test
Person
Chinese
use chopsticks.
这是因为会自动加上super();
class Chinese extends Person{
Chinese(){
super();
System.out.println("Chinese");
}
void eat(){
System.out.println("use chopsticks.");
}
}
那么为什么要使用抽象类呢?
可以使语义和语法的错误达成统一。
class Printer{
void open(){
System.out.println("open");
}
void close(){
System.out.println("close");
}
void print(){
} }
class HPPrinter extends Printer{
void print(){
System.out.println("Using HPPrinter.");
} }
class CanonPrinter extends Printer{
void print(){
System.out.println("Using CanonPrinter.");
}
}
PS D:\Java\code\练习七> java Test
open
Using HPPrinter.
close
open
Using CanonPrinter.
close
这样写是没问题的,但是如果开发者不是一个人的话,那么就会产生一个问题,在子类中没有复写函数的话,编译器并不会报错。因此修改
abstract class Printer{
void open(){
System.out.println("open");
}
void close(){
System.out.println("close");
}
abstract void print(); }
如果子类中没有复写函数的话,就会报如下的错误:
PS D:\Java\code\练习七> javac .\Test.java
.\HPPrinter.java:1: 错误: HPPrinter不是抽象的, 并且未覆盖Printer中的抽象方法print()
class HPPrinter extends Printer{
^
1 个错误
最新文章
- 初步认识TDD
- PHP 常用框架
- Unity3d之个性化鼠标
- C# 索引器使用总结
- JiaThis WordPress分享插件安装全攻略
- ASP.NET MVC5 第4章
- 【转载】MyBatis之传入参数
- string为什么可以写入共享内存
- Hello又大了一岁
- 基于MVC3下拉列表联动(JQuery)
- 浅谈JavaScript中的柯里化函数
- 【.NET】XML文件的创建,修改,删除
- css3实战版的点击列表项产生水波纹动画
- 【MySQL】查看支持的引擎show engines;
- Axios使用说明
- JS学习笔记Day20
- Redis 使用介绍-Linux-Bash
- pt站 扫盲贴 面向小白
- -bash: ls: No such file or directory 产生的原因及修改方法
- bootstrap之表格和按钮
热门文章
- PIE-SDK For C++栅格数据的创建
- sqli-labs less-5 -->; less-6
- python3运行时候报错集锦:读取文件报错
- BZOJ2780(广义后缀自动机,set启发式合并)
- 2018 HBCPC 菜鸡选手记
- 全网最详细——Testlink在windows环境下搭建;提供环境下载
- XJOI CSP-S2 2019开放模拟训练题1 赛后总结
- [Arc068D/At2299] Card Eater - 结论
- Ubuntu中chrome浏览器安装、卸载
- PHP中关于foreach使用引用变量的坑