面向对象进阶-抽象类
抽象方法
将共性行为(方法)抽取到父类,由于每个子类执行内容不一样,在父类不能确定具体的方法体,该方法可以定义为抽象方法。
抽象类:如果一个类中存在抽象方法,那么该 类必须声明为抽象类。
抽象方法定义格式:public abstract 返回值类型 方法名(参数列表); 不写方法体
抽象类定义格式: public abstract class 类名{}
注意事项
- 抽象类不能实例化
- 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类。
- 抽象类可以有构造方法(当创建子类对象时,给属性赋值用的)
- 抽象类的子类:要么重写抽象类所有抽象方法,要么是抽象类(需要继续创建子类重写)。
案例
public abstract class Animal {
private int age;
private String name;
public Animal() {
}
public Animal(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void eat();
public void drink(){
System.out.println("heshui");
}
}
public class Dog extends Animal{
public Dog() {
}
public Dog(int age, String color) {
super(age, color);
}
@Override
public void eat(){
System.out.println("吃骨头");
}
}
public class frog extends Animal{
public frog() {
}
public frog(int age, String name) {
super(age, name);
}
@Override
public void eat() {
System.out.println("吃虫子");
}
}
public class sheep extends Animal{
@Override
public void eat() {
System.out.println("chicao");
}
}
public class Test { public static void main(String[] args) { frog f=new frog(1,"小绿"); System.out.println(f.getAge()+f.getName()); f.eat(); f.drink(); } }