抽象类
抽象类的概述
当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!
抽象里的特点
1、抽象类和抽象方法必须使用 abstract 关键字修饰
2、抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
3、抽象类不能实例化
4、抽象类可以有构造方法
5、抽象类的子类要么重写抽象类中的所有抽象方法要么是抽象类
抽象类和抽象方法的定义格式
1,抽象类的定义格式
public abstract class 类名 { }
2,抽象方法的定义格式
public abstract void 方法名();
关于抽象类的一个小案例
案例需求
定义猫类(Cat)和狗类(Dog)
猫类成员方法:eat(猫吃鱼)drink(喝水…)
狗类成员方法:eat(狗吃肉)drink(喝水…)
实现步骤
- 猫类和狗类中存在共性内容,应向上抽取出一个动物类(Animal)
- 父类Animal中,无法将 eat 方法具体实现描述清楚,所以定义为抽象方法
- 抽象方法需要存活在抽象类中,将Animal定义为抽象类
- 让 Cat 和 Dog 分别继承 Animal,重写eat方法
- 测试类中创建 Cat 和 Dog 对象,调用方法测试
Animal类具体实现
public abstract class Animal{
public void drink(){
System.out.println("drink water...");
}
//注意抽象方法只能存在与抽象类中。
public abstract void eat();
}
Dog类具体实现
public class Dog extends Animal{
//子类需要重写父类中的每一个抽象方法。
public void eat(){
System.out.println("狗吃肉。");
}
}
Cat类具体实现
public class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
}
测试类测试一下
public class Test{
public static void main(String[] args){
//创建一个新的狗类对象
Dog d = new Dog();
d.dirnk();
d.eat();
Cat c = new Cat();
c.dirnk();
c.eat();
}
}
模板设计模式
设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
模板设计模式
把抽象类整体就可以看做成一个模板,模板中不能决定的东西定义成抽象方法 让使用模板的类(继承抽象类 的类)去重写抽象方法实现需求。
模板设计模式的优势
模板已经定义了通用结构,使用者只需要关心自己需要实现的功能即可。
关于模板设计模式的一个小例子
//一个作文模板类,规定了作文的题目和结尾,要写作文的同学只需要改写中间部分就可以了,即重写body方法就可以了。
public abstract class CompositionTemplate {
public final void write(){
System.out.println("<<雪中悍刀行>>");
body();
System.out.println("我曾雪中悍刀行");
}
public abstract void body();
}
//比如徐凤年要写作文
public class XuFengNian extends CompositionTemplate{
public void body(){
System.out.println("我曾敦煌骑龙袍!");
}
}
//最后测试一下
public class Test {
public static void main(String[] args) {
XuFengNian t = new XuFengNian();
t.write();
}
}
Final关键字的应用
fianl关键字的作用
final代表最终的意思,可以修饰成员方法,成员变量,类
final修饰类、方法、变量的效果
1、fianl修饰类:该类不能被继承(不能有子类,但是可以有父类)
2、final修饰方法:该方法不能被重写
3、final修饰变量:表明该变量是一个常量,不能再次赋值
注 变量是基本类型,不能改变的是值
变量是引用类型,不能改变的是地址值,但地址里面的内容是可以改变的