#第27节 Java抽象类和抽象方法(abstract)
##Abstract类与abstract方法
用关键字abstract修饰的类称为abstract类(抽象类)。如:
abstract class A {
…
}
用关键字abstract修饰的方法称为abstract方法(抽象方法),例如:
abstract int min(int x,int y);
###注意事项
1、和普通的类相比,abstract类可以有abstract方法,也可以有非abstract方法。
2、对于abstract类,我们只能声明,不能使用new运算符创建该类的对象。如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象的方法,给出方法体。
3、abstract类也可以没有abstract方法。
4、如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承这个abstract方法。
5、对于abstract方法,只允许声明,不允许实现。
示例:
A.java
public abstract class A {
void eat(){
System.out.println("eat"); //非抽象类方法
}
abstract int getMax(); //抽象类方法,没有方法体
}
###主类Demo25
不能进行初始化,因为A是一个抽象类,抽象类不能直接调用它的构造方法产生对象
新建一个B类继承于A
B继承A必须重写
B.java继承了A后,实现的抽象方法
public class B extends A{
@Override
int getMax() {
int a =10;
int b = 20;
if(a>b){
return a;
}else {
return b;
}
}
}
##抽象类和抽象方法与多态紧密的结合
定义一个父类Car
public abstract class Car {
abstract void cautionSound();
}
定义子类PoliceCar
public class PoliceCar extends Car{
@Override
void cautionSound() {
System.out.println("zhua...zhua...zhua");
}
}
定义子类FireCar
public class FireCar extends Car{
@Override
void cautionSound() {
System.out.println("huo...huo...huo");
}
}
主类Demo25
public class Demo25 {
public static void main(String[] args) {
Car car = new PoliceCar();
car.cautionSound();
car = new FireCar();
car.cautionSound();
}
}
##面向抽象编程
在设计一个程序时,可以通过在abstract类中声明若干个abstract方法,表明这些方法在整个系统设计中的重要性,方法体的内容细节由它的非abstract子类去完成。
使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法。
所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。
新建SoundMaker类
运行结果
修改代码后
运行结果
发现SoundMaker不管传什么过来,它只管发声,如果想发不同的声音就传不同的过来,这就是上转型对象和多态的魅力,永远接收一个父类的对象,可以把不同的子类赋给我,然后去调用共有的实例方法,就能达到你想要的目的。