GitOPEN's Home.

《Monkey Java》课程6.0之抽象类和抽象函数

Word count: 888 / Reading time: 4 min
2015/07/16 Share

本节课程将学习以下内容:

  • 抽象函数的语法特征
  • 抽象类的语法特征
  • 抽象类的作用

抽象函数的语法特征

定义:

只有函数的定义(返回值类型、函数名、参数列表),没有函数体的函数被称为抽象函数。

特点:

  • 如果一个类中有一个或者一个以上的抽象函数,那么这个类也必须被定义为抽象类;

格式:

1
abstract void function();

抽象类的语法特征

定义:

使用abstract定义的类(在class前加上abstract关键字)称之为抽象类。

特点:

  • 抽象类天生就是用来被继承的,俗称基类;抽象类的子类也必须声明为抽象的,或者,必须在子类中复写父类中的抽象函数;
  • 抽象类不能够生成对象;但抽象类可以有构造函数,它可以在子类中被调用;(重要)
  • 如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象函数;
  • 如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类。

例子1:(请动手)

  1. 创建一个名为Person.java的Java源文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
abstract class Person{
String name;
int age;

Person(){
System.out.println("Person的构造函数");
}

Person(String name, int age){
this.name = name;
this.age = age;
System.out.println("Person的2个参数构造函数");
}
void introduce(){
System.out.println("我的名字叫 " + this.name + ",我的年龄是 " + this.age);
}

//抽象函数
abstract void eat();

}

2.创建一个名为Chinese.java的Java源文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Chinese extends Person {
String address;

Chinese(){
System.out.println("Chinese的构造函数");
}

Chinese(String name, int age, String address){
super(name, age);
this.address = address;
System.out.println("Chinese的3个参数构造函数");
}

// Chinese这个子类复写了Person中的抽象函数eat(),
// 复写后的eat()函数不再是抽象函数,
// 因此,Chinese类中没有抽象函数,它也不需要声明为抽象类。
void eat(){
System.out.println("用筷子吃饭!");
}
}

3.创建一个名为Demo01.java的Java源文件:

1
2
3
4
5
6
7
class Demo01 {
public static void main(String[] args) {
// 子类的对象赋值给父类的引用,这是向上转型。
Person p01 = new Chinese();
p01.eat();
}
}

抽象类的作用

作用:

  • 父类无法完成的函数具体功能,就声明为抽象函数,让子类复写实现(必须);
  • 通过方法的复写实现了多态的属性。

例子2:(请动手)

1.新建一个Printer.java的Java源文件:

1
2
3
4
5
6
7
8
9
10
abstract class Printer{
void open(){
System.out.println("open");
}
void close(){
System.out.println("close");
}
// 抽象函数print()
abstract void print();
}

2.新建一个HpPrinter.java的Java源文件:

1
2
3
4
5
6
7
// 该惠普打印机为喷墨打印机
class HpPrinter extends Printer{
// 重写父类的抽象方法print()方法
void print(){
System.out.println("使用惠普喷墨打印机进行打印");
}
}

3.新建一个CanonPrinter.java的Java源文件:

1
2
3
4
5
6
7
// 该佳能打印机为针式打印机
class CanonPrinter extends Printer{
// 重写父类的抽象方法print()方法
void print(){
System.out.println("使用佳能针式打印机进行打印");
}
}

4.新建一个Demo01.java的Java源文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 该佳能打印机为针式打印机
class Demo01{
public static void main(String[] args) {
Printer hp = new HpPrinter(); // 向上转型
hp.open();
hp.print();
hp.close();

Printer cannon = new CanonPrinter();
cannon.open();
cannon.print();
cannon.close();
}
}

欣慰帮到你 一杯热咖啡
【奋斗的Coder!】企鹅群
【奋斗的Coder】公众号
CATALOG
  1. 1. 抽象函数的语法特征
  2. 2. 抽象类的语法特征
  3. 3. 例子1:(请动手)
  4. 4. 抽象类的作用