[02] 抽象类
1、抽象类的声明
我们举过例子如Cat类继承Animal类,但是Cat你可以知道是具体什么样,两个尖耳朵,身体柔软娇小,喵喵叫,可是你告诉我,Animal长什么样呢?
如果一个类中没有包含足够的信息来描绘一个具体的对象,这个类应该使用abstract关键字设置为抽象类。
【访问权限】 abstract class 类名 { 成员列表 }
1
1
【访问权限】 abstract class 类名 { 成员列表 }
既然我们说抽象类没有足够的信息去描述具体对象,那么显然,抽象类不能被实例化,只是为了定义子类的共同特征。但是抽象类是可以有构造方法的,这主要是让子类调用。
2、抽象方法
抽象类中可以有具体实现的方法,也可以有抽象方法,即仅作定义,而由子类去提供具体实现的方法。
【访问权限】 abstract 返回值类型 方法名称( 参数列表 );
1
1
【访问权限】 abstract 返回值类型 方法名称( 参数列表 );
需要注意的是:
- 含有抽象方法的类,一定需要定义为抽象类
- 子类要求必须实现父类的抽象方法
- 构造方法和静态方法不可以修饰为abstract
- 抽象类可以有成员属性和非抽象的成员方法
3、示例
//抽象类,父类
public abstract class Animal {
private String name;
protected Animal(String name) {
this.name = name;
}
public abstract String eat();
}
//子类
public class Cat extends Animal{
private int age;
public Cat(String name, int age) {
super(name);
this.age = age;
}
@Override
public String eat() {
return "猫吃东西,吃猫粮";
}
}
x
1
//抽象类,父类
2
public abstract class Animal {
3
private String name;
4
5
protected Animal(String name) {
6
this.name = name;
7
}
8
9
public abstract String eat();
10
11
}
12
13
//子类
14
public class Cat extends Animal{
15
16
private int age;
17
18
public Cat(String name, int age) {
19
super(name);
20
this.age = age;
21
}
22
23
24
public String eat() {
25
return "猫吃东西,吃猫粮";
26
}
27
}