抽象类的定义与使用

2020-10-31  本文已影响0人  曾梦想仗剑天涯

抽象类基本定义

//定义一个抽象类
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 JavaDemo {
  public static void main(String [] args) {
    //抽象类不可以直接new
    //Message msg = new Message();
  }
}
//使用抽象类
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 "进行了数据连接";
  }
}
 public class JavaDemo {
  public static void main(String [] args) {
    Message msg = new DataBaseMessage();    //向上转型
    System.out.println(msg.getConnectInfo());
  }
}

抽象类的相关说明

    抽象类是一个重要的面向对象设计的结构,对于抽象类使用的时候需要注意几点:

abstract class Message {    //定义抽象类
  private String type;
  public Message(String type) {   //类中没有提供无参构造
    this.type = type;
  }
  public abstract String getConnectInfo();    //定义抽象方法
  public void setType(String type) {    //普通方法
    this.type = type;
  }
  public String getType() {   //普通方法
    return this.type;
  }
}
class DataBaseMessage extends Message {   //类的继承关系
  public DataBaseMessage(String str) {
    super(str);
  }
  public String getConnectInfo() {    //方法覆写
    return "进行了数据连接";
  }
}
 public class JavaDemo {
  public static void main(String [] args) {
    Message msg = new DataBaseMessage("客户消息");    //向上转型
    System.out.println(msg.getConnectInfo());
    System.out.println(msg.getType());
  }
}
abstract class Message { 
  public abstract String getInfo();
  public static Message getInstance() {
    return new DataBaseMessage();
  }
}
class DataBaseMessage extends Message { 
  public String getInfo() {
    return "进行了数据连接";
  }
}
 public class JavaDemo {
  public static void main(String [] args) {
    Message msg = Message.getInstance();
    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: {
        this.work();
        break;
      }  
      case EAT + SLEEP + WORK: {
        this.eat();
        this.sleep();
        this.work();
        break;
      }
      default: {
        break;
      }
    }
  }
  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 JavaDemo {
  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.WORK);
    System.out.println("********人行为*********");
    personAction.command(Action.EAT + Action.SLEEP + Action.WORK);
    System.out.println("********猪行为*********");
    pigAction.command(Action.EAT);
    pigAction.command(Action.SLEEP);
  }
}
上一篇 下一篇

猜你喜欢

热点阅读