package cm.abstracts.application;
//这个类用来测试:在抽象类的普通方法中调用抽象方法
public class InstanceFfourtyFive {
public static void main(String[] args) {
//有构造方法不一定有对应的抽象方法,有抽象方法必有对应的构造方法
//通过子类实例化抽象类对象
Love l = new Hate();
//直接调用抽象类中定义的抽象方法,其具体内容已经过子类覆写
l.diaoChou();
}
}
//创建抽象模板类:父类,必有子类,关键字abstract
abstract class Love{
//对类中程序自动创建的隐式构造方法,要习惯性创建,养成一种良好习惯
public Love() {}
//创建抽象类中的普通方法,并在此抽象类的此普通方法中调用抽象方法
/** 抽象类中可以定义普通方法,最为关键的是,这些普通方法可以直接调用抽象类中定义的抽象方法,而具体的抽象方法是经过子类覆写的 */
protected void diaoChou() {
//经过子类覆写的抽象方法的具体内容
this.love();
}
//抽象类中定义的抽象方法
public abstract void love();
}
//创建子类:抽象类必有子类,一个子类只能有一个抽象类(父类)
class Hate extends Love{
//对类中程序自动创建的隐式构造方法,要习惯性创建,养成一种良好习惯
public Hate() {}
@Override //备注:中文意思覆写、重写、覆盖,重写抽象类中的同名抽象方法
/** 抽象类中可以定义普通方法,最为关键的是,这些普通方法可以直接调用抽象类中定义的抽象方法,而具体的抽象方法是经过子类覆写的 */
//经过子类覆写的抽象方法的具体内容
public void love() {
System.out.println("问世间情为何物,直教人生死相许");
System.out.println("我爱谁,谁爱我,我还能爱谁");
System.out.println("誓要出书,哪怕自费,字数最起码几十万,近百万");
}
}
彦舜原创,首发