抽象类

类继承的主要作用在于可以扩充已有类的功能。父类无法强制约定子类覆写某些方法。
完善的类:可以直接使用的类,在开发之后都是继承抽象类。

抽象类的基本定义:
1.抽象类的主要作用在于对子类中的覆写方法进行约定。
2.抽象方法:使用了 abstract 关键字定义,并且没有提供方法体的方法。
3.抽象方法所在的类必须是抽象类。
4.抽象类必须使用 abstract 定义。(在普通类的基础上追加抽象方法就是抽象类)
5.抽象类无法实例化

抽象类的使用:
1. 不能使用 final 关键字定义抽象类,因为抽象类必须有子类,而 final 定义的类不能被继承。
2. 抽象类是作为一个普通类的加强版出现的(就是在普通类的基础上追加了抽象方法),抽象类可以提供构造方法,而且子类也会按照子类对象的实例化原则对父类构造进行调用。
3. 抽象类中允许没有抽象方法,不管有没有抽象方法,都无法实例化抽象类对象。
4. 抽象类中可以提供 static 方法,该方法不会受到抽象类对象的局限(可以通过类名称直接调用)

 

 

//定义抽象类
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 "Oracle的连接信息";
    }
}

public class Demo{
    public static void main(String args[]){
        Message msg  = new DatabaseMessage();    //(向上转型)实例化
        
        msg.setType("用户信息");    //子类调用父类方法
        System.out.println(msg.getConnectInfo());
        System.out.println(msg.getType());
    }
}
/*------------------------------------------------------
E:\Javacode>java Demo
Oracle的连接信息
用户信息

E:\Javacode>*/
//定义抽象类-抽象类的构造方法
abstract class Message {
    private String type;
    
    public abstract String getConnectInfo();
    
    //定义构造
    public Message(String type){
        this.type = type;
    }
    
    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 "Oracle的连接信息";
    }
}

public class Demo{
    public static void main(String args[]){
        Message msg  = new DatabaseMessage("用户信息");    //(向上转型)实例化
        
        System.out.println(msg.getConnectInfo());
        System.out.println(msg.getType());
    }
}
/*------------------------------------------------------
E:\Javacode>java Demo
Oracle的连接信息
用户信息

E:\Javacode>*/
// 抽象类中使用 static 方法,可以直接进行调用
abstract class Message {
    public abstract String getInfo();
    
    public static Message getInstance(){
        return new DatabaseMessage();
    }
}

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

public class Demo{
    public static void main(String args[]){
        Message msg = Message.getInstance();
        System.out.println(msg.getInfo());
    }
}
/*-------------------------------------
E:\Javacode>java Demo
数据库连接信息

E:\Javacode>*/

 

posted @ 2019-02-22 17:39  眉毛病  阅读(122)  评论(0编辑  收藏  举报