用关键字abstract修饰类,就是抽象类。用关键字abstract修饰就是抽象方法。
对于抽象方法,只允许声明,没有方法体。而且不允许使用final和abstract同时修饰一个方法或者类,也不允许使用static修饰抽象方法,即抽象方法必须是实例方法。
1.抽象类中可以有抽象方法,也可以没有抽象方法
2.抽象方法不能被实例化,即不能被new创建对象
不能使用new来创建抽象类的对象。如果一个非抽象类是一个抽象类的子类,那么它必须重写父类的抽象方法,给出方法体,这就是为什么不能用final和abstract同时修饰一个类或方法的原因。
3.抽象类的对象作上转型对象
尽管不能用new来创建抽象类的对象,但是抽象类可以成为其子类对象的上转型对象,那么就可以调用子类重写的方法。
package com.seven.j_hbm_extends;
public class Example {
public static void main(String[] args) {
Dog dog = new Dog();//子类创建对象
System.out.println("排名是:"+ dog.paiming2());//子类调用自己的方法
dog.speak();//子类调用重写父类的抽象方法
Animal animal=dog;//父类成为子类的上传型对象
System.out.println("排名是:"+animal.paiming1());//父类调用自己的方法
animal.speak();//父类调用自己的抽象方法
}
}
abstract class Animal{
abstract void speak();
int paiming1(){
return 1;
}
}
class Dog extends Animal{
void speak() {
System.out.println("我是高级动物");
}
int paiming2(){
return 2;
}
}