标签:style class blog c code java
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的构造函数”
标签:style class blog c code java
原文地址:http://www.cnblogs.com/iMirror/p/3737065.html