抽象类

Posted dododo70

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类相关的知识,希望对你有一定的参考价值。

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

抽象类的基本定义:
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>*/

 











以上是关于抽象类的主要内容,如果未能解决你的问题,请参考以下文章

查看发票组代码后的总结和有感

使用 Git 来管理 Xcode 中的代码片段

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)

记一次抽象类中定义的静态变量,多个子类继承后,在方法中被重写引起的问题

Java 封装