父类代码如下:
public abstract class Animal {
public float weight;
public float height;
public void practice() { //static 是类方法,不能被子类复写
run();// 在抽象类中,abstract 方法可以被非abstract 方法调用,
eat();//但是直到abstract 方法被复写,这个非abstract 方法才能被执行
System.out.println("practice is over!");
}
public abstract void run(); //这个已经是abstract 方法了,则不能再是static 方法。static 不能修饰abstract,abstract是必须被复写的方法,static 是不能被复写,矛盾
public abstract void eat();
public static void main(String[] args) {
//由以下两句代码可知,abstract 类的非abstract 方法也没法直接被外界用,abstract 除了被继承,一无所用
//Animal.practice(); //本句错,practice() 不是static 方法,不能被类调用
//Animal a = new Animal();//本句错,abstract 类不能实例化方法。
}
}
子类代码如下:
public class Cat extends Animal{
@Override
public void practice(){ //子类只能复写父类的非static 方法,父类的static 方法不能被复写
}
@Override
public void run() { //abstract 的方法必须被复写
}
@Override
public void eat() {
}
}