首页 > 代码库 > 抽象类和抽象函数
抽象类和抽象函数
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的构造函数”
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。