这个问题可能听起来多余,因为标题和另一个问题完全一样。然而,有一个简单的区别——我没有在构造函数中给出返回类型。话虽如此,我一定是在做其他同样愚蠢的事情,我似乎不知道是什么。我在这里看到了类似的执行工作。为什么它不适用于我的代码?
这是演示final关键字如何工作的代码的一部分(忽略注释):
class Calculate{
double radius = 10.0;
double pi;
final double circumference(){ //final method cannot be overridden
return 2*pi*radius;
}
}
final class Circle extends Calculate{ //final class cannot be extended
double pi;
Circle(){}
Circle(double pi){
this.pi = pi;
}
public void soutresult(){
super(pi);
System.out.println("The circumference of Circle is = "+circumference());
}
}
问题是,这个答案显示了同样事情的良好执行,而在Netbeans中,我得到了对super的调用必须是构造函数中的第一个语句的错误。误差显示在超(pi)处。我希望能够将圆周率的值发送到计算中
package on20170322;
/**
*
* @author Siddhant
*/
public class Question2{
final double pi =22/7.0; //final variable sets constant value
public static void main(String[] args) {
Handler handler = new Handler();
handler.sendFinalObject();
Circle circle = handler.getFinalObject();
circle.soutresult();
}
}
class Handler{
Question2 q2 = new Question2();
Circle circle;
double pi;
Handler(){
this.pi=q2.pi;
}
void sendFinalObject(){
circle= new Circle(pi);
}
Circle getFinalObject(){
return circle;
}
}
class Calculate{
double radius = 10.0;
double pi;
final double circumference(){ //final method cannot be overridden
return 2*pi*radius;
}
}
final class Circle extends Calculate{ //final class cannot be extended
double pi;
Circle(){}
Circle(double pi){
this.pi = pi;
}
public void soutresult(){
super(pi);
System.out.println("The circumference of Circle is = "+circumference());
}
}
我错过了什么?
根据流行的建议,我对代码做了一些修改。这是新版本。它传递非最终变量,而不是pi。我在本机中使用了pi的定义。虽然有人担心传递最后一个变量,还有一些令人遗憾的困惑,但我的目的是展示我之前阅读的另一段代码。现在,我明白了为什么我的代码没有提前运行。感谢大家的反馈,我也想知道我能做些什么来改善这一点(因为有人提到我的代码一团糟。请指出,这样我可以学习)
这是最新的版本。我已经对目标进行了描述。这显然是一个模糊的练习,我只是想让它变得有趣。如果您能提供有关如何改进(及其缺点)的反馈,我将不胜感激同时忠实于以下概述的目标。
/**
* WAJP to calculate circumference of circle using final & this keyword
*
* We shall demonstrate the following things:
* - Final variable can only be set once during runtime
* - Final method cannot be overridden with @Override annotation
* - Final class cannot be extended
* - 'this' keyword is used to target the class that it is in
*
* Execution Method:
* - There are 4 classes with Question2 as the class with main function.
* - The Handler class handles Get-Post request and creates abstraction layer
* - Question2 demonstrates final variable property
* - Handler demonstrates this keyword
* - Circle demonstrates final class property
* - Calculate demonstrates final method property
*/
package on20170322;
/**
*
* @author Siddhant
*/
public class Question2{
final double radius =10.0; //final variable sets constant value
public static void main(String[] args) {
Handler handler = new Handler();
handler.sendFinalObject();
Circle circle = handler.getFinalObject();
circle.soutresult();
}
}
class Handler{
Question2 q2 = new Question2();
Circle circle;
double radius;
Handler(){
this.radius=q2.radius;
}
void sendFinalObject(){
circle= new Circle(radius);
}
Circle getFinalObject(){
return circle;
}
}
class Calculate{
double radius;
Calculate(double radius){
this.radius = radius;
}
final double circumference(){ //final method cannot be overridden
return 2*radius*Math.PI;
}
}
final class Circle extends Calculate{ //final class cannot be extended
Circle(double radius){
super(radius);
}
public void soutresult(){
System.out.println("The circumference of Circle, with radius(r)="+radius+", is (p)="+circumference());
}
// Overriding final methods is not possible
// @Override
// double circumference(){
// return 2*radius*Math.PI;
// }
}
除了许多评论外,我不太明白你在这里想做什么。
然而,导致错误的直接原因是,您试图从方法public void soutresult()调用super(),这不起作用,因为该方法不是构造函数。Super是一个非常特殊的调用,只能在构造函数中使用。
构造函数没有返回类型。您的Circle
的构造函数看起来像public Circle(双testPI)
调用超级(testPi);
相当于说“使用testPI值设置我的计算部分”。您还需要在计算
类中定义适当的公共计算(双pi)
构造函数。
因为超(pi)
应该从Circle(双pi)
调用为
Circle(double pi){
super(pi);
this.pi = pi;
}
不是来自soutresult()
。
Super(pi)
实际上是对父级构造函数的调用,在您的情况下,这不能从soutresult()
调用。
此外,在您的计算
类中,您必须添加一个接收双
类型参数的构造函数,如下所示:
Calculate(double pi){
this.pi = pi;
}
有关super()的更多信息,请参阅Java中的super()
我在下棋。我想做一个抽象的piece类,然后可以通过pawn/knight/rook/等进行扩展。假设我的piece类是这样的: 我希望Pawn具有相同的sayName功能,但我希望它具有不同的movePiece功能,因为Pawn有自己独特的移动方式。我怎么做典当,使它扩展件,并覆盖件的移动件功能?
问题内容: 我用来生成输出一些数据。 我面临的问题是在创建和打开电子表格时,列不会展开,因此乍一看,某些长文本(如日期格式的文本)不会显示。 我可以双击excel中的列边框以展开或拖动边框以调整列宽,但是可能会有20多个列,并且每次打开电子表格时,我都不想手动进行此操作:( 我发现了(尽管可能是错误的方法),也许可以做到这一点,但没有运气。也许我以错误的方式使用它。 示例代码段 创建此电子表格后,
问题内容: 我已经通过使用ApacheCXF(v3.0.4)实现了JAX-WS客户端,并且一切正常,但是当我想在Java 8(jdk1.8.0_25)中使用安全连接(SSL / TLS)时出现了问题。 我在日志(-Djavax.net.debug = all)中看到以下异常: 经过depeer分析后,我发现问题是由于Java 8不会发送server_name(SNI),而Java 7却发送了ser
这是我现在面临的问题。我有一个类,假设 ,这个类定义了一个名为 的方法,该方法返回一个 实例。类 在 内部定义,并被声明为。我想做的是定义一个扩展的类,但我也我自己的功能(方法,属性等)来扩展。我也希望返回。 问题是< code>Bar是最终的。下面是我想做的一个例子: 我想做的是: 我怎样才能做到这一点? [编辑]我正在为我的问题添加更多详细信息。我实际上正在为 Jenkins 开发一个插件,搜
问题内容: 有这样的事情: 抽象类: 和扩展器: 我想要的是扩展,因为如果不处理它,然后尝试在中处理它。例如add- 但同时让类处理默认值,例如。 这是完全错误的方法吗? 到目前为止,我所做的就是添加一个接口。通常: 在课堂上: 在课堂上: 这看起来像是可用的设计吗? 并且,主要问题: 有没有什么好办法扩展该类,以便可以使用与in 中相同的切换方法?我想知道的是,有没有一个更好的设计,第二个是是否
问题内容: 我正在尝试扩展Python,以用于越野比赛的结果。我想从格式为string的对象构造一个对象。我可以使用工厂设计模式和注释来完成此操作。我将如何通过覆盖和/或完成相同的任务? 使用下面的代码,构造一个对象会引发TypeError。请注意,未调用,因为未打印。 这是错误: 如果将代码从移至,则会得到以下结果。注意这次,输出显示我的函数被调用了。 问题答案: 显然,对象是不可变的,这意味着