java中的抽象类和抽象方法

知识点:java中的抽象类和抽象方法

             关键字abstract意为抽象的,可以用来修饰类和方法,分别称作抽象类和抽象方法

              抽象类一般在多态的场景中使用

 

一:抽象类(abstract class)

在类的继承中,如果一个个新的子类被定义,子类变得越来越具体,父类变得更加一般和通用,类的设计应该保证父子类能够共享特征,有时将父类设计得非常抽象,使得父类没有具体的实例,这样的类叫做抽象类;一般当我们设计一个类,不需要创建此类的实例时,可以考虑将该类设置成抽象类,让其子类实现这个类的抽象方法

抽象类的特征:

 ( 1 ) 不可被实例化

(2)抽象类是有构造器的(所有类都有构造器)

(3)抽象方法所在的类,一定是抽象类(因为抽象方法是没有方法体的,如果所在的类不是抽象类,那么该类可以实例化对象,调用抽象方法,然后无方法体去具体实现功能,则矛盾)

(4)抽象类可以没有抽象方法的

 //抽象类
abstract class Person {
String name;
public Person(){}//抽象类的构造方法
     public abstract void dink();//抽象方法,无{}方法体
public void eat(){ //非抽象方法
};

}
class Student extends Person{
@Override
public void eat() {
System.out.println("吃饭");
}

@Override
public void dink() {
System.out.println("喝水");
}
}

二:抽象方法(abstract method)

abstract修饰的方法为抽象方法

抽象方法的特征:

(1)格式,没有方法体,包括{ },例如  public abstract void dink();

 (2)抽象方法只保留方法的功能,具体的执行,交给继承抽象类的子类,由子类重写改抽象方法

 (3)如果子类继承抽象类,并重写了父类的所有的抽象方法,则此子类不是抽象类,可以实例化的

 (4)如果子类继承抽象类,没有重写父类中所有的抽象方法,意味着子类中还有抽象方法,那么此子类必须必须声明为抽象的。

 

上面的例子中,Student子类继承抽象父类,自重写了eat()抽象方法,没有重写drink()抽象方法,会报错,解决方法是把drink()方法也重写了,或者把Student也变成抽象类

 三:抽象类的使用场景

抽象类一般在运用多态时,比较适用

 

posted @ 2019-04-23 19:47  shuaiflying  阅读(16103)  评论(0编辑  收藏  举报