1、抽象类可以没有抽象方法,有抽象方法的类必须是抽象类[注意:抽象类的抽象方法也是用abstract定义的]
2、非抽象类继承抽象类必须实现所有抽象方法
3、抽象类可以继承抽象类,可以不实现父类抽象方法
4、抽象类可以有方法实现和属性
5、抽象类不能被实例化
6、抽象类不能声明为final
7、抽象类可以有构造方法
/**
抽象类:用abstract关键字声明的类称为抽象类
很多具有相同特征和行为的的对象可以抽象为一个类
很多具有相同特征和行为的类可以抽象为一个抽象类
*/
public class Test27 {
public static void main(String[] args) {
Man man = new Man();
man.move();
man.eat();
Woman woman = new Woman();
woman.move();
woman.eat();
}
}
abstract class Animal{
public abstract void move(); //抽象方法的声明,抽象方法只有声明,没有实现
public void sleep(){
System.out.println("shuijiao");
}
}
abstract class Person extends Animal{ //根据实际业务要不要第一个继承类也是抽象类
public abstract void eat(); //抽象方法的声明,抽象方法只有声明,没有实现
}
//继承抽象类的具体类必须实现所有的抽象方法【包括继承的父类的父类】
class Man extends Person{
public void move(){
System.out.println("我爱跑步");
}
public void eat(){
System.out.println("我爱吃水果");
}
}
class Woman extends Person{
public void move(){
System.out.println("我爱逛街");
}
public void eat(){
System.out.println("我爱吃水果too");
}
}
模板方法模式Templete Method
定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中,模板方法模式使得子类可以
不改变一个算法的结构即可重新定义该算法的某些特定的步骤
public class Test28 {
public static void main(String[] args) {
UserManager um = new UserManager();
um.action("test","add");
}
}
abstract class Manager{
public void action(String name,String method){
if("admin".equals(name)){
System.out.println("是管理员,可以操作");
excute(method);
}else{
System.out.println("非管理员无法操作");
}
}
public abstract void excute(String method);
}
class UserManager extends Manager{
public void excute(String method){
if("add".equals(method)){
System.out.println("执行添加");
}else if("del".equals(method)){
System.out.println("执行删除");
}
}
}