定义一个抽象类
1abstract class Message{2 private String type;3 public abstract String getConnectInfo(); // 抽象方法4 public void setType( String type){5 this.type = type;6 }7 public String getType(){8 return this.type;9
10 }11}12
13public class AbstractDemo{14 public static void main(String args []){15 Message msg = new Message(); // 抽象类是不能直接new的2 collapsed lines
16 }17}
注意: 抽象类不是一个完整的类,不能直接new,如果要使用抽象类,必须满足以下几点: 抽象类必须提供有子类,子类使用extends继承一个抽象类。 抽象类的子类(不是抽象类)一定要覆写抽象类中的全部抽象方法 抽象类的对象实例化可以利用对象多态性通过子类向上转型的方式完成。
使用抽象类
1abstract class Message{2 private String type;3 public abstract String getConnectInfo(); // 抽象方法4 public void setType( String type){5 this.type = type;6 }7 public String getType(){8 return this.type;9 }10}11class DatabaseMessage extends Message{ //类的继承关系12 public String getConnectInfo(){13 return "连接上数据库!";14 }15}7 collapsed lines
16
17public class AbstractDemo{18 public static void main(String args []){19 Message msg = new DatabaseMessage(); // 抽象类是不能直接new的20 System.out.println(msg.getConnectInfo());21 }22}
注意:从整体上来说 ,抽象类只是比普通类增加了抽象方法以及对子类的强制性覆写要求,其他使用方式与传统子类完全相同。 对于抽象类使用的几点意见: 抽象类使用很大程度上有一个核心问题,抽象类无法直接实例化 抽象类之中主要的目的是进行过渡操作使用,所以当你要使用抽象类进行开发的时候需要解决类继承 问题时所带来的代码重复处理。
抽象类的相关说明 抽象类不能够使用final关键字来定义, 因为抽象类必须有子类,而final定义的是不能有子类的。 static 不受抽象类限制。
1abstract class Message{2 public abstract String getInfo(); // 抽象方法3 public static DatabaseMessage getInstance(){4 return new DatabaseMessage();5 }6}7class DatabaseMessage extends Message{ //类的继承关系8 public String getInfo(){ //覆写9 return "数据库连接成功!";10 }11}12
13public class AbstractDemo{14 public static void main(String args []){15 Message msg = Message.getInstance();3 collapsed lines
16 System.out.println(msg.getInfo());17 }18}
抽象类的应用——简单应用, 提供一个模板,所有子类按照父类要求定义方法,用好这个,还有很长的路要走
1abstract class Action{2 public static final int EAT = 1;3 public static final int SLEEP = 5;4 public static final int WORK = 10;5 public void command(int code ){6 switch(code){7 case EAT: {8 this.eat();9 break;10 }11 case SLEEP: {12 this.sleep();13 break;14 }15 case WORK: {71 collapsed lines
16 this.work();17 break;18 }19 case EAT +SLEEP +WORK: {20 this.eat();21 this.sleep();22 this.work();23 break;24 }25 } // end switch26 } // end27 public abstract void eat();28 public abstract void sleep();29 public abstract void work();30}31
32class Robot extends Action {33 public void eat(){34 System.out.println("机器人需要电源开始充电!");35 }36 public void sleep(){37 }38 public void work(){39 System.out.println("机器人开始不停的工作且不用休息!");40 }41}42
43class Person extends Action{44 public void eat(){45 System.out.println("人类开始吃大鱼大肉了!");46 }47 public void sleep(){48 System.out.println("躺下安静的休息就完事了!");49 }50 public void work(){51 System.out.println("认真工作,踏实挣钱!");52 }53}54
55class Pig extends Action{56 public void eat(){57 System.out.println("我也不想吃剩饭啊!");58 }59 public void sleep(){60 System.out.println("倒地就睡就完事了!");61 }62 public void work(){63 }64}65
66public class AbstractDemo{67 public static void main(String args []){68 Action robotAction =new Robot();69 Action personAction =new Person();70 Action pigAction =new Pig();71 System.out.println("-----------机器人行为----------");72 robotAction.command(Action.EAT);73 robotAction.command(Action.SLEEP);74 robotAction.command(Action.WORK);75
76 System.out.println("-----------人类行为----------");77 personAction.command(Action.EAT);78 personAction.command(Action.SLEEP);79 personAction.command(Action.WORK);80
81 System.out.println("-----------小猪猪行为----------");82 pigAction.command(Action.EAT);83 pigAction.command(Action.SLEEP);84 pigAction.command(Action.WORK);85 }86}