abstract修饰符可以用来修饰类,也可以用来修饰方法,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。
抽象方法只能写在抽象类中
抽象类中可以有抽象方法,也可以有普通方法。
抽象类eg:public abstract class Demo01{
}
抽象方法,只有方法的名字,没有方法体,方法实现
eg:public abstract void run();
public abstract class Demo01{
public abstract void run();
//抽象方法
public void eat(){ //非抽象方法
System.out.println("hello");
}
}
父类:
public abstract class Action {
public abstract void doSomething(); //抽象方法
public abstract void ha(); //抽象方法
public void hello(){ //非抽象方法
System.out.println("hello");
}
}
抽像类的所有方法,必须要由子类来实现,继承了抽象的子类都必须重写父类中的全部抽象方法(非抽象方法可以直接调用),除非子类也是抽象类,就由子子类来实现(重写)祖父类的抽象方法。
子类1:
//抽象类的所有方法,必须要由子类实现,继承了抽象类的子类都必须要重写全部抽象方法。
//除非子类也是抽象类,需要子子类实现其方法。
public class A extends Action{
@Override//必须重写父类的方法
public void doSomething() {
System.out.println("asd");
}
@Override
public void ha() {
System.out.println("dxd");
}
//public abstract void a();
}
如果不全部重写父类的抽象方法,会报错
如果子类也是抽象类,则由子子类来重写祖父类,和父类的抽象方法
子类2:
public abstract class B extends Action {
public abstract void xmz();
}
子子类
public class C extends B{
@Override
public void hello() {
super.hello();
}
@Override
public void ha() {
}
@Override
public void doSomething() {
}
@Override
public void xmz() {
}
}
子子类必须重写父类和祖父类的全部抽象方法,否则也会报出错误。
注意:
- 不能new抽象类,只能靠子类实现它:约束!
- 抽象类中可以写普通方法
- 抽象方法必须写在抽现象类中。