wordpress的链接功能/东莞seo黑帽培训
抽象类的概述
引入: 父类知道子类一定要完成某个功能,但是每个子类实现的情况都不一样
而且子类都会用自己的功能了,父类的该功能就可以定义成抽象的方法。
拥有抽象方法的类必须定义成抽象类。
什么是抽象方法?
没有方法体,只有方法签名,必须用abstract修饰的方法就是抽象方法。
什么是抽象类?
拥有抽象方法的类必须定义成抽象类。
抽象类必须用abstract关键字修饰。
public class AbstractDemo {public static void main(String[] args) {Wolf qpl = new Wolf();qpl.run();}
}class Wolf extends Animal{@Overridepublic void run(){System.out.println("🐺跑的贼贼溜~~~");}
}// 抽象类:拥有了抽象方法的类必须定义成抽象类。抽象类必须加上abstract修饰。
abstract class Animal{// 抽象方法:没有方法体,只有方法签名,必须加上abstract修饰。public abstract void run();
}
抽象类的使用
抽象类是为了被继承。
一个类继承了抽象类,必须重写完抽象类的全部抽象方法,否则这个类必须定义成抽象类。
因为拥有抽象方法的类必须定义成抽象类。
抽象类的特征研究和深入
抽象类的特征:有得有失
有得:抽象类拥有了得到抽象方法的能力。
失去:抽象类失去了创建对象的能力。
面试题:
- 抽象类是否有构造器,是否可以创建对象,为什么?==
- 抽象类作为类一定有构造器,而且必须有构造器。
- 提供给子类继承后调用父类构造器使用的。
- 抽象类虽然有构造器,但是抽象类绝对不能创建对象。
- 抽象类中可能存在抽象方法,抽象方法不能执行。
- 抽象在学术上本身意味着不能实例化。
抽象类除了有得有失之外,类的其他成分人家都具备!!
小结:
抽象类不能创建对象。
抽象类除了不能创建对象之外,类的其他成分它都具备!
抽象类中也可以没有抽象方法!!
抽象类的意义
抽象类存在的意义有两点:
(1)被继承,抽象类就是为了被子类继承,否则抽象类将毫无意义。(核心意义)
(2)抽象类体现的是"模板思想":部分实现,部分抽象。(拓展)
-------------------------------------可以使用抽象类设计一个模板模式
使用抽象类设计一个模板模式
设计模式: 是前人(技术大牛,或者一些技术协会,或者一些大型知名的IT公司)
已经研发好或者设计好或者在实战开发中发现的的优秀软件设计思想,开源出去
后来者可以直接使用就能够得到很好的软件模式。
设计模式的目的: 得到优秀的软件架构,从而提升代码的可重用性,扩展性,维护性,可读性。
模板模式是一种设计模式思想
模板模式的作用:部分实现,部分抽象,可以极大的简化功能代码,提高开发效率
写一个模板模式的案例:作文模板。
作文模板:
标题和第一段 以及最后一段是固定的,
正文部分交给使用模板的人自己来实现。
小结:
抽象类是部分实现,部分抽象的含义,所以可以设计模板模式。
好处:模板可以确定的模板自己实现,模板不能确定的定义成抽象方法交给使用模板的人重写。
可以设计出优秀的设计模式,提升开发效率,提高代码的重用性!
public class ExtendsDemo {public static void main(String[] args) {Student xiaoMa = new Student();xiaoMa.write();Teacher boZai = new Teacher();boZai.write();}
}class Teacher extends Template{@Overridepublic String writeMain() {return "\t\t我爸就是好,有多好,做他儿子才能懂~~~";}
}class Student extends Template{@Overridepublic String writeMain() {return "\t\t我爸爸很牛,我爸爸是马云,就是爽,很有钱~~~~";}
}
// 1.写一个模板类:代表了作文模板。
abstract class Template{private String title = "\t\t\t\t\t\t《我的爸爸》";private String one = "\t\t我的爸爸很牛逼,到底有多牛呢,请看如下说明:";private String last = "\t\t以上就是我的爸爸,简直太好了,下辈子还要做他儿子!";// 2.提供一个写作文方法public void write(){System.out.println(title);System.out.println(one);// 正文:正文部分模板是不知道怎么写的!应该把正文部分定义成抽象方法// 交给使用模板的子类重写!System.out.println(writeMain());System.out.println(last);}// 正文部分定义成抽象方法,交给子类重写!!public abstract String writeMain();
}
抽象类的注意事项和总结
- 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。- 抽象类一定有而且是必须有构造器,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造器中,有默认的super(),需要访问父类构造器。- 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。
- 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
理解:抽象类中已经实现的是模板中确定的成员,
抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。