美文网首页Monkey Java
课程6.0之抽象类和抽象函数

课程6.0之抽象类和抽象函数

作者: GitOPEN | 来源:发表于2015-08-05 14:00 被阅读49次

转发请注明出处:
安卓猴的博客(http://sunjiajia.com)


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

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

抽象函数的语法特征

定义:

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

特点:

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

格式:

abstract void function();

抽象类的语法特征

定义:

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

特点:

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

例子1:(请动手)

  1. 创建一个名为Person.java的Java源文件:
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源文件:

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源文件:

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

抽象类的作用

作用:

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

例子2:(请动手)

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

abstract class Printer{
  void open(){
    System.out.println("open");
  }
  void close(){
    System.out.println("close");
  }
  // 抽象函数print()
  abstract void print();
}

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

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

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

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

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

// 该佳能打印机为针式打印机
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();
  }
}

相关文章

  • 课程6.0之抽象类和抽象函数

    转发请注明出处:安卓猴的博客(http://sunjiajia.com) 本节课程将学习以下内容: 抽象函数的语法...

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • Kotlin学习笔记(二)类的分类

    1.抽象类 抽象类用abstract关键字修饰,抽象类用abstract修饰的函数,就做抽象函数。抽象类中也可以有...

  • C++ - 纯虚函数与抽象类

    纯虚函数:没有函数体的虚函数 抽象类:包含纯虚函数的类只能作为基类来派生新类使用不能创建抽象类的对象抽象类的指针和...

  • 抽象工厂模式

    新增抽象工厂接口 CourseFactory(课程工厂) 新增手记的抽象类 和 抽象方法 新增视频的抽象类 和 抽...

  • 抽象类相关

    抽象类有构造函数吗?抽象类有构造函数,如果抽象类声明并定义了构造函数,它可以用来初始化抽象类内部声明的通用变量,并...

  • 9.21

    今天学习了抽象类和拷贝构造函数 class 类名{virtual 类型 函数名(参数表)=0;...} 抽象类掌握...

  • c++语法4

    接上一篇继续学习抽象类、函数模板 抽象类 c++中的抽象类是通过纯虚函数体现的,凡是含有纯虚函数的类叫做抽象类纯虚...

  • 13.抽象类和抽象函数

    1.抽象函数的语法特征 2.抽象类的语法特征 3.抽象类的作用 什么是抽象函数 只有函数的定义,没有函数体的函数,...

  • 2017-9-21学习总结

    笔记内容: 抽象类 抽象类的一般形式 带有纯虚函数的类称为抽象类: class 类名{virtual 类型 函数名...

网友评论

    本文标题:课程6.0之抽象类和抽象函数

    本文链接:https://www.haomeiwen.com/subject/ftavqttx.html