抽象类
概念
抽象的概念:模糊 不具体。
普通的方法:有方法的声明部分,也有方法体部分,可被直接调用。
例:public void test(){
方法体;
}
抽象方法的概念:不具体的方法,没有方法体的方法。使用abstract修饰。不能被直接调用。
public abstract void test(); (抽象方法没有方法体,无法执行,不能被直接调用)
抽象类:不具体的类。类中有了抽象方法,导致类也就不具体的,就是抽象类。也使用abstract修饰。类中只要有了抽象方法,那么这个类也就必须是一个抽象类。
普通的具体类
public class Demo{
内容;
}
抽象类
public abstract class Demo{ (因为其中有抽象方法不能执行,所以也不能创建对象)
内容;
}
为什么要有抽象类?
如果父类的一个方法要被所有的子类都重写,那么这个方法有方法体就毫无意义(反正方法都会被重写,不如让这个方法直接没有方法体),而且抽象方法被子类继承之后,子类必须重写继承自父类的抽象方法。
class Demo2
{
public static void main(String[] args){
B b = new B();
b.show();//B...Override...show
C c = new C();
c.show();//C...Override...show
}
}
//父类 --- 抽象类
abstract class A
{
/*
既然要求在A类的所有子类中都要去重写继承自A类的show()方法,
所以在A类中定义show()方法并指定方法体内容就毫无意义。
此时就将A类中的show()方法定义为抽象方法,即只有方法声明部分,
没有方法体;然后让A类的所有子类都"必须"去重写继承自A类的show()
方法。
public void show(){
System.out.println("A...show");
}
因为A类中有抽象方法了,所有A类也抽象了,就必须将A类定义为抽象类,
即给A类加修饰符abstract;
*/
//抽象方法
public abstract void show();
}
//子类
class B extends A
{
//要求在B类中必须重写继承自A类的show()方法
public void show(){
System.out.println("B...Override...show");
}
}
//子类
class C extends A
{
//要求在C类中必须重写继承自A类的show()方法
public void show(){
System.out.println("C...Override...show");
}
}