抽象方法必需在抽象类中
抽象方法必需在子类中实现(覆盖)
抽象类与接口的异同
1.abstract(抽象)类 表示是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract类中可以有自己的成员变量,也可以有普通成员方法,而在interface中,只能够有静态的不能被修改的成员变量(也就是必须是 static final的,必须给其初值,不过在 interface中一般不定义成员变量),只有抽象方法存在。
3.abstract类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
4.实现abstract类和interface的类必须实现其中的所有方法。
5.abstract类和interface最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,并且这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到这个新方法,而interface做不到,如果向一个Java接口里加一个新抽象方法,那么所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
抽象类:
1:使用abstract修饰一个类 这个类就是抽象类
2:抽象类中可以有抽象方法,也可以没有
3:如果一个类中包含抽象方法,这个类必须 修饰为抽象类
4:如果一个子类继承了一个包含抽象方法的的抽象类
4.1 要不就将自己使用abstract 修饰为抽象类
4.2 要不就实现(重写)继承下来的抽象方法
5:抽象类不能创建实例 不能使用 new
abstract class Animal{
/**
* 可以定义变量和常量
* 声明一个抽象方法,方法的具体定义交给子类去重写
* 使用abstract修饰的方法是抽象方法
* 如果一个类中包含有抽象方法,那么这个类就一定要是抽象类
* */
public abstract void sayHello();
//也可以定义普通的方法
public void show(){
System.out.println("-----show()-----");
}
}
class Dog extends Animal{
@Override
public void sayHello() {
System.out.println("--Dog---终于可以正常说话了---");
}
//也可以重写父抽象类的普通方法
public void show(){
System.out.println("--Dog---show()------");
}
}