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 个错误

  

最新文章

  1. 初步认识TDD
  2. PHP 常用框架
  3. Unity3d之个性化鼠标
  4. C# 索引器使用总结
  5. JiaThis WordPress分享插件安装全攻略
  6. ASP.NET MVC5 第4章
  7. 【转载】MyBatis之传入参数
  8. string为什么可以写入共享内存
  9. Hello又大了一岁
  10. 基于MVC3下拉列表联动(JQuery)
  11. 浅谈JavaScript中的柯里化函数
  12. 【.NET】XML文件的创建,修改,删除
  13. css3实战版的点击列表项产生水波纹动画
  14. 【MySQL】查看支持的引擎show engines;
  15. Axios使用说明
  16. JS学习笔记Day20
  17. Redis 使用介绍-Linux-Bash
  18. pt站 扫盲贴 面向小白
  19. -bash: ls: No such file or directory 产生的原因及修改方法
  20. bootstrap之表格和按钮

热门文章

  1. PIE-SDK For C++栅格数据的创建
  2. sqli-labs less-5 --> less-6
  3. python3运行时候报错集锦:读取文件报错
  4. BZOJ2780(广义后缀自动机,set启发式合并)
  5. 2018 HBCPC 菜鸡选手记
  6. 全网最详细——Testlink在windows环境下搭建;提供环境下载
  7. XJOI CSP-S2 2019开放模拟训练题1 赛后总结
  8. [Arc068D/At2299] Card Eater - 结论
  9. Ubuntu中chrome浏览器安装、卸载
  10. PHP中关于foreach使用引用变量的坑