第23集 抽象类和抽象函数
主要内容
1.抽象函数的语法特征.
2.抽象类的语法特征.
3.抽象类的作用.
问1:什么是抽象函数?
只有函数的定义,没有函数体的函数被称为抽象函数.
abstract void fun();
问2:什么是抽象类?
使用abstract定义的类被称之为抽象类.
1.抽象类不能够生成对象.
2.如果一个类当中包含有抽象函数,那么这个类必须声明为抽象类.
3.如果一个类当中没有抽象函数,那么这类也可以被声明为抽象类.
问3:抽象类可以有构造函数么?
条件:
1.抽象类不能生成对象.
2.构造函数用于生成类的对象.
结论: 如果从这个片面的两点来看,抽象类没有构造函数.
但是. 抽象类可以有构造函数,这个构造是为子类服务的.
抽象类就是用来作父类的,所以抽象类一般作基类。 抽象方法必须在子类中实现,即在子类中复写。
第24集 为什么用抽象类
抽象类表达的是一种概念.
如上例,如果不使用抽象类,子类就可能忘记实现父类的print()方法.
主要内容
1.抽象函数的语法特征.
2.抽象类的语法特征.
3.抽象类的作用.
问1:什么是抽象函数?
只有函数的定义,没有函数体的函数被称为抽象函数.
abstract void fun();
问2:什么是抽象类?
使用abstract定义的类被称之为抽象类.
1.抽象类不能够生成对象.
2.如果一个类当中包含有抽象函数,那么这个类必须声明为抽象类.
3.如果一个类当中没有抽象函数,那么这类也可以被声明为抽象类.
问3:抽象类可以有构造函数么?
条件:
1.抽象类不能生成对象.
2.构造函数用于生成类的对象.
结论: 如果从这个片面的两点来看,抽象类没有构造函数.
但是. 抽象类可以有构造函数,这个构造是为子类服务的.
abstract class Person23{
String name;
int age;
Person23(){
System.out.println("person构造函数");
}
Person23(String name ,int age){
this.name = name;
this.age = age;
}
void introduce(){
System.out.println("名字是" +name+age);
}
abstract void eat();
}
//********************************************************************************************//
//这样可以能过编译.
//abstract class Chinese extends Person23{
//
//}
//********************************************************************************************//
//这样可能通过编译.
class Chinese extends Person23{
Chinese(){
System.out.println("chinese构造函数");
}
Chinese(Sting name,int age ,String address){
super(name,age);
this.address = address;
}
void eat(){
System.out.println("用筷子吃饭");
}
}
//********************************************************************************************//
class TestChinese{
public static void main(String args[]){
Person23 p = new Chinese();
p.eat();
}
}
问4:抽象类不能生成对象,那定义这个类有什么用呢?
抽象类就是用来作父类的,所以抽象类一般作基类。 抽象方法必须在子类中实现,即在子类中复写。
第24集 为什么用抽象类
抽象类表达的是一种概念.
//*如果一段代码在语意上是有错误的,那么在语法上也应该是有错误的.这是现代编程理论强调的一点,但是还没有那种语言完全实现过*///
abstract class Printer{
void open(){
System.out.println("open");
}
void close(){
System.out.println("close");
}
void print(){
}
//abstract void print();//抽象函数
//在语意上有错误,我们让它在语法上也有错误.
//语法上的错误更加容易检查出来.
}
//*********************************************************************************//
// 该打印机为喷墨打印机进行打印
class HPPrinter extends Printer{
void print(){
System.out.println("使用喷墨打印机进行打印");
}
}
//*********************************************************************************//
//该打印机为针式打印机
class CanonPrinter extends Printer{
void print(){
System.out.println("使用针式打印机进行打印");
}
}
//*********************************************************************************//
class Test{
public static void main(String args[]){
Printer p1 = new HPPrinter();//向上转型,子类对象赋给父类的引用.
p1.open();
p1.print();
p1.close();
Printer p2 = new CanonPrinter();//向上转型,子类对象赋给父类的引用.
p2.open();
p2.print();
p2.close();
}
}
为什么要使用抽象类?
如上例,如果不使用抽象类,子类就可能忘记实现父类的print()方法.
那么就会隐藏错误.