首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java /s C++ -从Java中的方法返回最终对象

Java /s C++ -从Java中的方法返回最终对象
EN

Stack Overflow用户
提问于 2017-06-05 06:08:18
回答 1查看 1.9K关注 0票数 2

我知道在方法定义中指定的'final‘关键字声明这些方法不能被重写。但是,如果我想要一个方法返回最后一个对象呢?如何在Java中指定这一点?

代码语言:javascript
复制
class A{
    final int x;
    A(){
        x = 5;
    }
    final int getx(){
        return x;
    }
}
class B extends A{
    final int x;
    B(){
        x = 5;
    }
    final int getx(){
        return x;
    }
}
class he{
    public static void main(String args[]){
        A a = new A();
        final int x = a.getx();
        System.out.println(x);
    }
}

上面的代码给出了编译错误。我知道为什么我要推翻最后一种方法。但我的意图是从getx()返回一个最终对象(即返回x作为最终整数)。

这是我的C++等效代码。效果很好。

代码语言:javascript
复制
#include <bits/stdc++.h>
class A{
public:
    const int x;
    A():x(5){
    }
    const int getx(){
        return x;
    }
};
class B:public A{
public:
    const int x;
    B():x(5){
    }
    const int getx(){
        return x;
    }
};
int main(){
    A *a = new A();
    const int x = a->getx();
    std::cout<<x<<std::endl;
    return 0;
}

这是因为C++有两个不同的关键字- "const“和"final”。在C++ 'final‘关键字中,函数原型末尾指定了关键字,如下所示:

代码语言:javascript
复制
virtual int getx() final {}

因此,这两个关键字区分了“方法的返回类型是什么”和“哪些方法不能被覆盖”。

我的问题是:在Java中有同样的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-05 06:39:08

Java中的final和C++中的const是非常不同的东西,试图将C++关于常量的想法应用到Java中是行不通的。

在Java中,数据类型的final意味着

  1. 此对象是不可变的(仅适用于本机类型)。
  2. 对此对象的引用是不可变的(对于用户定义的类型)。这意味着保存对此对象的引用的变量不能更改为指向另一个对象。但是,这并不意味着底层对象是不可变的。

现在,如果我从Java中的函数返回一个值,那么它要么是一个本地类型(我们通过值返回),要么是一个用户定义的类型,我们通过引用返回。在这两种情况下,返回值的最后限定符都是多余的。

  1. 从本机类型的函数返回的Rvalue已经是不可变的。
  2. 函数返回的引用也是rvalue,也是不可变的。

然而,在C++中,const限定的返回值(让我们简单地说是对const的引用)意味着返回引用背后的对象是不可变的,因此不能使用该引用调用非const函数。

final是在C++11中添加的,这意味着继承类(与C++11相同)不能覆盖该成员函数。

需要注意的是,Java不像C++那样具有const正确性,如果不混合这些概念,您的生活就会更容易。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44362680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档