抽象类与抽象方法
一、为什么使用抽象方法和抽象类
二、抽象方法 抽象方法指一些只有方法声明,而没有具体方法体的方法。
结构
abstract class 类名称
{
声明数据成员;
访问权限 返回值的数据类型 方法名称(参数...)
{
...
}
abstract 返回值的数据类型 方法名称(参数...);
}
**注意:**
?普通方法必须要有方法体,抽象方法不能有方法体(大括号也没有) ?抽象方法要用abstract修饰 ?抽象方法没有方法体,直接以分号结束。 public abstract void shout(); public abstract void eat();
三、抽象类 概念:包含抽象方法的类称为抽象类。抽象类为子类提供一个规范。目的是让子类继承(extends)。 结构:修饰符 abstract class 类名{} 可以定义:普通变量,抽象方法,构造方法,普通方法 注意: ?若没有子类继承extends,则这种规范没有任何意义。 ?抽象类的定义方式关键字abstract ?如果一个类包含抽象方法,那么该类必须是抽象类。
举例:public abstract class Animal {} 抽象方法shout eat
四、抽象方法的实现 抽象方法必须靠继承extends可以实现,继承抽象类的子类必须重写父类所有的抽象方法,否则,该子类也必须声明为抽象类。 关键字:extends 举例01:(1)定义一个抽象类Animal,包含name、age属性, 一个普通方法toString() 有一个抽象方法shout() 、 eat(),普通方法sleep() 、play() (2)定义一个Dog类继承抽象类Animal,并且实现抽象方法 (3)定义一个Cat类继承抽象类Animal,并且实现抽象方法 (4)定义一个Tiger类继承抽象类Animal,并且实现抽象方法 (5)定义一个Goat类继承抽象类Animal,并且实现抽象方法 (6)定义一个测试类创建以上几种动物,并打印输出
五、注意 抽象类的使用原则 如下: ?抽象方法必须为public 或者protected,抽象类默认为public的定义方式关键字abstract ?抽象方法不能直接实例化,需要依靠子类使用关键字extends继承 ?一个子类只能继承一个抽象类 ?子类如果不是抽象类,必须重写抽象类中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为抽象类) ?抽象类不能使用final关键字,因为抽象类必须有子类,而final定义的类不能有子类
六、总结 ?1.抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。 ?2.只有抽象类的非抽象子类才可以创建对象 ?3.抽象类中不一定包含抽象方法,但是有抽象方法的类必须定义为抽象类 ?4.抽象类中的抽象方法只是声明,不包含方法体。 ?5.抽象类的子类必须给出抽象类中抽象方法的具体实现,除非子类也是抽象类。 七.练习题
package case5;
public class abstractTest {
public static void main(String[] args) {
Student s=new Student("张三",20,"学生");
Worker w=new Worker("李四",30,"工人");
System.out.println( s.talk());
System.out.println( w.talk());
}
}
abstract class Person {
String name;
int age;
String occupation;
abstract String talk();
}
class Student extends Person {
public Student(String name,int age,String occupation){
this.name=name;
this.age=age;
this.occupation=occupation;
}
String talk(){
return "学生——>姓名:"+name+",年龄:"+age+",职业:"+occupation+"!";
}
}
class Worker extends Person {
public Worker(String name,int age,String occupation){
this.name=name;
this.age=age;
this.occupation=occupation;
}
String talk(){
return "工人——>姓名:"+name+",年龄:"+age+",职业:"+occupation+"!";
}
}
|