引入抽象:
- 在之前把不同类中的共有成员变量和成员方法提取到父类中叫做继承。
- 然后对于成员方法在不同子类中有不同的内容,对这些方法重新书写叫做重写;
- 不过如果有的子类没有用继承的方法,用别的名字对这个方法命名的话,后面的人看代码的时候不是很难看懂么,这个时候就引入抽象类和抽象方法了
- 抽象方法:就是将子类中共性的方法抽取到父类之后,由于每个子类中执行的方法具体内容不一样,所以在父类中就不能确定具体的方法体,该方法就可以定义为抽象方法。
- 抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类。、
抽象类和抽象方法的定义格式
- 抽象方法的定义格式:
-
public abstract 返回值类型 方法名(参数列表)
- 抽象类的定义格式:
-
public abstract class 类名{}
抽象类和抽象方法的注意事项:
- 抽象类不能实例化。
- 抽象类中不一定有抽象方法,不过有抽象方法的类一定是抽象类。
- 可以有构造方法
抽象类的子类:
- 要么重写抽象类中的所有抽象方法
- 要么是抽象类
代码分析:
在下面我会书写一个子类和一个抽象父类,一个子类代表狗,
在这里抽象父类中定义的有eat抽象方法,因为抽象方法必须在子类中重写。所以Dog子类中必须重写eat方法,如果不重写会报错
package pdsu_zjh;
public abstract class Animal {
private String name;
private int age;
//空参
public Animal() {
super();
// TODO Auto-generated constructor stub
}
//有参
public Animal(String name, int age) {
super();
this.name = name;
this.age = age;
}
//gets代表输出,sets代表输入·
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
抽象方法
public abstract void eat();//抽象方法不能有方法体所以没有大括号;
}
这是子类
package pdsu_zjh;
public class Dog extends Animal{
public Dog() {
super();
// TODO Auto-generated constructor stub
}
//在这里super中的name和age可以对在父类中继承的name和age进行初始化。
public Dog(String name, int age) {
super(name, age);
// TODO Auto-generated constructor stub
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
}