JAVA之抽象类
1.抽象类定义
抽象类:用abstra关键字声明的类称为抽象类
很多具有相同特征和行为的对象可以抽象为一个类
很多具有相同特征和行为的类可以抽象为一个抽象类
2.抽象类的使用方法
用abstract关键字声明类即为抽象类,而用abstract声明的方法为抽象方法
抽象类可以没有抽象方法,但是有抽象方法的类必须是抽象类
非抽象类继承抽象类必须实现所有抽象方法
抽象类也可以继承抽象类,但可以不实现父类抽象方法
抽象类可以有方法实现和属性
但是抽象方法只能有声明不能有实现和属性
抽象类的继承必须用extends关键字
抽象类的声明
abstract class Animal{
public abstract void move();//抽象方法的声明,抽象方法只有声明,没有属性
}
抽象类继承抽象类
abstract class Person extends Animal{
public abstract void eat();//可以定义新的抽象方法,不需实现父类的抽象方法
public void sleep(){
System.out.println("睡觉");
}
}
非抽象类继承抽象类
class Man extends Person{
//必须实现所有的抽象方法,父类的 祖父类的
public void eat(){
System.out.println("爸爸教我吃");
}
public void move(){
System.out.println("爷爷教我动");
}
}
3.抽象类的应用-----模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中
模板方法设计模式是的子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤
如定义人、狗、猫,三类均为动物可吃可动可叫。
但是三类吃的不一样,动起来也不一样,叫声也不一样
先定义一个动物抽象类:`
abstract class Animal{
public abstract void eat();//可吃
public abstract void move();//可动
public abstract void voice();//可发声
}
在定义人:
class Person extends Animal{
public void eat(){
System.out.println("我吃熟肉");
}
public void move(){
System.out.println("我两腿走路");
}
public void voice(){
System.out.println("我能嘤嘤嘤");
}
}
定义小狗勾
class Dog extends Animal{
public void eat(){
System.out.println("我吃狗粮");
}
public void move(){
System.out.println("我四腿奔跑");
}
public void voice(){
System.out.println("我能汪汪汪");
}
}
定义小猫咪
class Cat extends Animal{
public void eat(){
System.out.println("我吃猫粮");
}
public void move(){
System.out.println("我飞檐走壁");
}
public void voice(){
System.out.println("我能喵喵喵喵喵喵,在你面前撒个娇");
}
}
测试类:
public class text{
public static void main(String[] args){
Person per=new Person();
per.eat();
per.move();
per.voice();
Dog dog=new Dog();
dog.eat();
dog.move();
dog.voice();
Cat cat=new Cat();
cat.eat();
cat.move();
cat.voice();
}
}
输出结果:
4.注意事项
抽象类不能被实例化
抽象类不能声明为final
抽象类可以有构造方法
抽象类和接口是配合而非替代关系,它们经常一起使用,接口声明能力,抽象类提供默认实现,实现全部或部分方法,一个接口经常有一个对应的抽象类。