深入探索JVM垃圾回收:ARM服务器垃圾回收的挑战和优化
上QQ阅读APP看书,第一时间看更新

1.3 从C++代码的执行过程看编译器支持面向对象语言

大家都知道,Java语言作为面向对象编程语言中的后来者,吸收了其他高级语言的特点,特别是吸收、借鉴了C++的很多特性。JVM作为字节码执行器,在对字节码进行编译和解释时也借鉴了C++编译器的实现。与面向过程的语言不同,面向对象的语言有三大特点:封装、继承和多态。下面从一个具体的实例出发,看一下编译器是如何支持这三大特点的。C++的代码示例如下:

struct CPoint{
    double xAxis;
    double yAxis;
};
class CShape {
private:
    double xAxis;
    double yAxis;
public:
    void setCenter(double xAxis, double yAxis) {
        this->xAxis = xAxis;
        this->yAxis = yAxis;
    }
    void setCenter(CPoint point) {
        this->xAxis = point.xAxis;
        this->yAxis = point.yAxis;
    }
    virtual string getType() {
            string s("Unknown");
            return s;
    }
};
class CCircle : CShape {
private:
    double radius;
public:
    virtual string getType() {return string("Circle");}
    void setRadius(double radius) {
        this->radius = radius;
    }
};

注意

C++的语法非常复杂,有静态成员函数、多继承、虚继承、模板等。这里只是为了简单演示编译器如何处理面向对象语言,所以仅仅包含了单继承、函数的重载和重写。