首页 > 代码库 > 抽象类和抽象函数

抽象类和抽象函数

1. 抽象函数的语法特征

2. 抽象类的语法特征

3. 抽象类的作用

 

1. 抽象函数的语法特征

       只有函数的定义,没有函数体的函数被称为抽象函数

       abstract void fun();

               Tips : abstract 抽象; 摘要;

2. 抽象类的语法特征

       <1>抽象类不能生成对象

       <2>一个类包含抽象函数, 那么这个类必须被声明为抽象类

       <3>一个类没有抽象函数, 那么这个类也可以被声明为抽象类

3. 抽象类的作用

       天生当爹

       作父类, 被继承.   

1 abstract class Person{
2     int age ; 
3     String name ;
4     
5     abstract void eat();
6 }

 1 abstract class Chinese extends Person{ 2 }  

         Chinese 继承 Person, eat是抽象函数, 故Chinese也要抽象

         但是这样做就失去了意义.故应该重写eat抽象函数

1 class Chinese extends Person{
2     void eat(){
3         System.out.println("筷子吃饭");
4     }
5 }  
1 abstract class Person{
2     int age ; 
3     String name ;
4     
5     abstract void eat();
6 }
class Test{
    public static void main(String args []){
        Chinese C = new Chinese();
        Person p = C ;   //向上转型
        p.eat();    
    }
}

         父类Person抽象类, 子类Chinese继承父类, 并重写(override)抽象函数,

         Test中由于父类不能生成对象, 用子类生成对象后, 向上转型调用重写函数.

 

4.抽象类可以有构造函数么

        <1>抽象类不能生成对象

        <2>构造函数用于生成类的对象

        因此, 表面上看是不能有构造函数的

        但是, 子类构造函数中会调用super()来调用父类的构造函数的.  所以父类可以有构造函数

       

 1 abstract class Person{
 2     Person(){
 3         System.out.println("Person的构造函数");   
 4     }
 5     
 6     int age ; 
 7     String name ;
 8     
 9     abstract void eat();
10 }
 1 class Chinese extends Person{
 2     Chinese(){
 3         //编译器会在此加上super();首先调用父类的构造函数的
 4         System.out.println("Chinese的构造函数"); 
 5     }
 6     
 7     void eat(){
 8         System.out.println("筷子吃饭");   
 9     }
10 }  
1 class Test{
2     public static void main(String args []){
3         Chinese C = new Chinese();
4         Person p = C ;
5         p.eat();    //向上转型
6     }
7 }

       故也会打印 “Person的构造函数