定义一个抽象类
abstract class Message{ private String type; public abstract String getConnectInfo(); // 抽象方法 public void setType( String type){ this.type = type; } public String getType(){ return this.type;
}}
public class AbstractDemo{ public static void main(String args []){ Message msg = new Message(); // 抽象类是不能直接new的2 collapsed lines
}}注意: 抽象类不是一个完整的类,不能直接new,如果要使用抽象类,必须满足以下几点: 抽象类必须提供有子类,子类使用extends继承一个抽象类。 抽象类的子类(不是抽象类)一定要覆写抽象类中的全部抽象方法 抽象类的对象实例化可以利用对象多态性通过子类向上转型的方式完成。
使用抽象类
abstract class Message{ private String type; public abstract String getConnectInfo(); // 抽象方法 public void setType( String type){ this.type = type; } public String getType(){ return this.type; }}class DatabaseMessage extends Message{ //类的继承关系 public String getConnectInfo(){ return "连接上数据库!"; }}7 collapsed lines
public class AbstractDemo{ public static void main(String args []){ Message msg = new DatabaseMessage(); // 抽象类是不能直接new的 System.out.println(msg.getConnectInfo()); }}注意:从整体上来说 ,抽象类只是比普通类增加了抽象方法以及对子类的强制性覆写要求,其他使用方式与传统子类完全相同。 对于抽象类使用的几点意见: 抽象类使用很大程度上有一个核心问题,抽象类无法直接实例化 抽象类之中主要的目的是进行过渡操作使用,所以当你要使用抽象类进行开发的时候需要解决类继承 问题时所带来的代码重复处理。
抽象类的相关说明 抽象类不能够使用final关键字来定义, 因为抽象类必须有子类,而final定义的是不能有子类的。 static 不受抽象类限制。
abstract class Message{ public abstract String getInfo(); // 抽象方法 public static DatabaseMessage getInstance(){ return new DatabaseMessage(); }}class DatabaseMessage extends Message{ //类的继承关系 public String getInfo(){ //覆写 return "数据库连接成功!"; }}
public class AbstractDemo{ public static void main(String args []){ Message msg = Message.getInstance();3 collapsed lines
System.out.println(msg.getInfo()); }}抽象类的应用——简单应用, 提供一个模板,所有子类按照父类要求定义方法,用好这个,还有很长的路要走
abstract class Action{ public static final int EAT = 1; public static final int SLEEP = 5; public static final int WORK = 10; public void command(int code ){ switch(code){ case EAT: { this.eat(); break; } case SLEEP: { this.sleep(); break; } case WORK: {71 collapsed lines
this.work(); break; } case EAT +SLEEP +WORK: { this.eat(); this.sleep(); this.work(); break; } } // end switch } // end public abstract void eat(); public abstract void sleep(); public abstract void work();}
class Robot extends Action { public void eat(){ System.out.println("机器人需要电源开始充电!"); } public void sleep(){ } public void work(){ System.out.println("机器人开始不停的工作且不用休息!"); }}
class Person extends Action{ public void eat(){ System.out.println("人类开始吃大鱼大肉了!"); } public void sleep(){ System.out.println("躺下安静的休息就完事了!"); } public void work(){ System.out.println("认真工作,踏实挣钱!"); }}
class Pig extends Action{ public void eat(){ System.out.println("我也不想吃剩饭啊!"); } public void sleep(){ System.out.println("倒地就睡就完事了!"); } public void work(){ }}
public class AbstractDemo{ public static void main(String args []){ Action robotAction =new Robot(); Action personAction =new Person(); Action pigAction =new Pig(); System.out.println("-----------机器人行为----------"); robotAction.command(Action.EAT); robotAction.command(Action.SLEEP); robotAction.command(Action.WORK);
System.out.println("-----------人类行为----------"); personAction.command(Action.EAT); personAction.command(Action.SLEEP); personAction.command(Action.WORK);
System.out.println("-----------小猪猪行为----------"); pigAction.command(Action.EAT); pigAction.command(Action.SLEEP); pigAction.command(Action.WORK); }}