9.2 抽象类相关说明

发布时间 2023-06-09 13:51:46作者: 盘思动
  • 抽象类铁律:不能实例化!!!!!

demo1 抽象类可以提供构造方法的;

abstract class Message {// 定义抽象类;
    private String type;

    // 此抽象类中没有提供无参构造,所以子类必须明确调用单参构造
    public Message(String type){
        this.type = type;
    }
    public abstract String getConnectInfo();//定义抽象方法;,没有方法体
    public String getType(){
        return this.type;
    }
}

class DatabaseMessage extends Message {
    public DatabaseMessage(String type){// 子类构造---父类没有无参构造,子类必须调用父类的有参构造;
        super(type);
    }

    @Override
    public String getConnectInfo(){// 方法覆写,定义方法体
        return "[" + super.getType() + "]数据库连接信息.";
    }
}

class HelloWorld {
    public static void main(String[] args) {
        Message msg = new DatabaseMessage("Oracle");// 子类为父类实例化;
        System.out.println(msg.getConnectInfo());
    }
}

  • 抽象类无法直接实例化
  • 抽象类中允许没有抽象方法;即使没有抽象方法,也无法直接使用关键词new直接来实例化抽象类;
  • 即便抽象类没有实例化对象,那么也无法直接使用关键词new获取抽象类的对象,必须依靠子类对象完成。

demo2 在抽象类中定义static方法

  • 抽象类可以提供有static方法,并且该方法不受到抽象类对象的局限。
abstract class Message {// 定义抽象类;--抽象类一定不能用final来定义;抽象类必须有子类;
    public abstract String getInfo();// 定义抽象方法
    public static Message getInstance(){// 返回Message对象实例
        return new DatabaseMessage();// 实例化子类对象
    }
}

class DatabaseMessage extends Message {
    @Override
    public String getInfo(){
        return "MLDN数据库连接信息";
    }
}

class HelloWorld {
    public static void main(String[] args) {
        Message msg = Message.getInstance();//直接调用static方法
        System.out.println(msg.getInfo());

    }
}
  • static方法永远不受到实例化对象或结构的限制,永远可以直接通过类名称直接调用!!