Java 抽象类和抽象函数

什么是抽象类?当然是比类还抽象的类了=。=
本文基于Mars老师的Java4Android视频。

抽象函数

只有函数的定义,而没有函数体的函数。

//没有花括号 { }
abstract void fun() ; 

抽象类

抽象类的语法特征:

  • 抽象类不能够生成对象。
    为什么呢?如果能生成对象,就可以通过对象调用抽象方法,然而抽象方法并没有方法体,就会出错。
  • 如果一个类当中包含抽象函数,那这个类必须被声明为抽象类。
  • 如果一个类当中没有抽象函数,也可以声明为抽象类。
    当有的类,我们不想让别人生成它的对象,就可以把它定义为抽象类。这种类,也称为基类,专门用来继承。
  • 抽象类可以有构造函数吗?
    (抽象类不能生成对象,构造函数用于生成类对象,那抽象类应该没有构造函数吧?)错了,抽象类是可以有构造函数的。在子类中,如果有构造函数(因为子类可以不是抽象类),那么系统在调用子类的这个构造函数时,会自动地加一行 super();,即调用父类的构造函数。

抽象类的作用

不能生成对象,要抽象类做什么呢?

  • 抽象类,天生就是用来当爹的,也就是用来被继承的。因为它的子类,可以通过重写抽象函数,从而可以生成对象。

举个例子
建一个抽象类,包含一个抽象函数eat()

abstract class Person {
        //抽象类可以有构造函数
    Person() {
        System.out.println("Person`s constructor");
    }

    String name;
    int age;
    void introduce() {
        System.out.println("My name is " + name + ",I`m "+ age + " years old"); 
    }
    
    abstract void eat();
}

Chinese作为Person的子类。如果不重写eat,类名前就必须加上abstract。当然这样做,继承就没什么意义了,因此我们重写eat方法。

class Chinese extends Person {
    Chinese() {
        //系统执行了super();
        System.out.println("Chinese`s constructor");
    }

    void eat() {
        System.out.println("Chinese food saikou~~~~");
    }
}

这里不能生成Person对象,因为它是抽象类。

class Test {
    public static void main(String args []) {
        //向上转型
        Person p = new Chinese();
        p.name = "sia";
        p.age = 22;
        p.introduce();          
        p.eat();
    
    } 
}

结果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,719评论 0 11
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,148评论 0 62
  • 无怨自掘深丘, 甚销枯魂断翼。 莫悔虔手焚香, 又独只影幽泊。 常戚夕辉不成梦, 偶余淡点耀心摧。
    木子兮shining阅读 294评论 0 3
  • 摒弃原生家庭及世俗的眼光,大胆勇敢、自信的做自己!
    Yoyo特立独行的猪阅读 177评论 0 1