抽象类
在平时我们定义类的时候,通常都会定义一些方法,这些方法通常用来描述这个类的具体行为,也就是说这些方法都用于具体的方法体。
那么,当一个父类如果这知道他的子类中有需要有那些行为声明而不知到具体的内容时会怎么样。
比如说:
生活中有一个必不可少的事情时花钱,但是花钱的对象有很多。声明虽然都是花钱,但是主体不同,这是我们就向上抽取一个方法,这个方法就是抽象方法。
女朋友 :行为:花钱
我自己 :行为:花钱
以上两者虽然都是花钱,但是具体怎么花却不一样。进行在向上抽取,由于花钱只是声明,但是子类的具体内容不同,这是是时需要用关键字abstract来标记出来。
abstract class money{
abstract void consume();//抽象方法
}
class girl extends money{
void consume() {
System.out.println("逛街,购物,吃饭,看电影······");
}
}
class myself extends money{
void consume() {
System.out.println("吃饭");
}
}
抽象类的特点:
- 抽象方法和抽象类都必须要用abstract来修饰,抽象方法一定要定义在抽象类中。
- 抽象类不能创建实体
- 只有子类将父类中全部的抽象方法实现后,子类才能实例化,否则子类依然是抽象类
抽象关键字abstract不可以和哪些关键字共存
-
final:fianl修饰的类是无法被继承的,而abstract修饰的类一定要有子类.final
修饰的方法无法被覆盖,但是abstract修饰的方法必须要被子类去实现的。 -
static:静态修饰的方法属于类的,它存在与静态区中,和对象就没关系了。而 抽象方法没有方法体,使用类名调用它没有任何意义。
-
private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和
-
private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类 根本无法得到父类这个方法。互相矛盾