有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java V/S C++从java中返回一个方法

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

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);
    }
}

上面的代码给出了一个编译错误。我知道我重写final方法的原因。但我的意图是从getx()返回最终对象(即返回x作为最终整数)

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

#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”和“最终”。在C++中,“最终”关键字在函数原型的末尾指定,类似这样的:

virtual int getx() final {}

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

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


共 (1) 个答案

  1. # 1 楼答案

    在C++中,p> > {< CD1>}和^ {< CD2>}是非常不同的事情,试图将C++中的常数应用到java java中的方法是不起作用的。p>

    在Java中,数据类型的final表示

    1. 此对象是不可变的(仅适用于本机类型)
    2. 对该对象的引用是不可变的(对于用户定义的类型)。这意味着持有对该对象的引用的变量不能更改为指向其他对象。然而,这并不意味着底层对象是不可变的

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

    1. 从本机类型的函数返回的R值已经是不可变的
    2. 从函数返回的引用也是右值,也是不可变的
    <>在C++中,A^ { }合格返回值(例如,引用const为简单起见)意味着返回引用的对象是不可变的,因此不能使用该引用调用非const函数。p>

    final是在C++11中添加的,这意味着这个成员函数不能被继承类重写(与Java相同)

    外挂是java没有C++相同的正确性,如果你不混合这些概念,你的生活会更容易。