我知道在方法定义中指定的'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);
}
}上面的代码给出了编译错误。我知道为什么我要推翻最后一种方法。但我的意图是从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“和"final”。在C++ 'final‘关键字中,函数原型末尾指定了关键字,如下所示:
virtual int getx() final {}因此,这两个关键字区分了“方法的返回类型是什么”和“哪些方法不能被覆盖”。
我的问题是:在Java中有同样的方法吗?
发布于 2017-06-05 06:39:08
Java中的final和C++中的const是非常不同的东西,试图将C++关于常量的想法应用到Java中是行不通的。
在Java中,数据类型的final意味着
现在,如果我从Java中的函数返回一个值,那么它要么是一个本地类型(我们通过值返回),要么是一个用户定义的类型,我们通过引用返回。在这两种情况下,返回值的最后限定符都是多余的。
然而,在C++中,const限定的返回值(让我们简单地说是对const的引用)意味着返回引用背后的对象是不可变的,因此不能使用该引用调用非const函数。
final是在C++11中添加的,这意味着继承类(与C++11相同)不能覆盖该成员函数。
需要注意的是,Java不像C++那样具有const正确性,如果不混合这些概念,您的生活就会更容易。
https://stackoverflow.com/questions/44362680
复制相似问题