当子类扩展到父类java继承时,不获取返回值
我是一名初学者,我正在努力学习java中的继承概念,我制作了一个计算继承面积的程序一个正方形和一个立方体的体积,我把立方体类扩展到正方形类 方形(父级) 立方体(子体) 但是当我在主类中打印值时,子类不会从我在父类中创建的方法中获取值 主类当子类扩展到父类java继承时,不获取返回值,java,inheritance,Java,Inheritance,我是一名初学者,我正在努力学习java中的继承概念,我制作了一个计算继承面积的程序一个正方形和一个立方体的体积,我把立方体类扩展到正方形类 方形(父级) 立方体(子体) 但是当我在主类中打印值时,子类不会从我在父类中创建的方法中获取值 主类 public class MainProgram { public static void main(String[] args){ Persegi persegi = new Persegi(); Kubus kubus =
public class MainProgram {
public static void main(String[] args){
Persegi persegi = new Persegi();
Kubus kubus = new Kubus();
Scanner nilai = new Scanner(System.in);
System.out.print("Masukkan nilai sisi = ");
persegi.setSisi(nilai.nextInt());
System.out.println("Luas = "+persegi.getLuas());
System.out.println("Volume = "+kubus.getVolume());
}
结果是这样的,而不是
public class Kubus extends Persegi{
Persegi psg = new Persegi();
public double getVolume(){
return psg.getLuas() * psg.getSisi();
}
}
使用
您不需要在子类中创建父类的实例,您的子对象已经是一个实例
而且(正如其他人已经提到的那样),您必须在Kubus
实例上调用setssi()
主要是:
public static void main(String[] args) {
Persegi persegi = new Persegi();
Kubus kubus = new Kubus();
kubus.setSisi(42); // you have to set the 'sisi' of the kubus ... 42 = magic number
Scanner nilai = new Scanner(System.in);
System.out.print("Masukkan nilai sisi = ");
persegi.setSisi(nilai.nextInt());
System.out.println("Luas = " + persegi.getLuas());
System.out.println("Volume = " + kubus.getVolume());
}
persegi
和kubus
是两个不同的对象。您尚未设置kubus
的任何属性。因此,Java0.0
中double-type的默认值是为kubus.getVolume()
您正在使用psg
对象的属性来计算getVolume()
方法的返回值
如果您想为psg
添加一个getter和setter:
public class Kubus extends Persegi {
Persegi psg = new Persegi();
public double getVolume() {
return psg.getLuas() * psg.getSisi();
}
public Persegi getPsg() {
return psg;
}
public void setPsg(Persegi psg) {
this.psg = psg;
}
}
然后可以设置psg
对象的属性:
Persegi persegi = new Persegi();
Kubus kubus = new Kubus();
Scanner nilai = new Scanner(System.in);
System.out.print("Masukkan nilai sisi = ");
persegi.setSisi(nilai.nextInt());
kubus.getPsg().setSisi(3.0); // assign 3.0 to sisi attribute of kubus object
System.out.println("Luas = "+persegi.getLuas());
System.out.println("Volume = "+kubus.getVolume());
然后得到结果:
Masukkan nilai sisi = 4
Luas = 16.0
Volume = 27.0
关于Volume=27.0
输出的说明:
返回getLuas()
3*3=9
getSisi()=3
返回getVolume()
:psg.getLuas()*psg.getSisi()
9*3=27
Kubus
实例上调用setssi()
,只在Persegi
实例上调用。因此,kubus.getSisi()。如果多维数据集保持未初始化状态(即,如果多维数据集实例上未调用setisi()
),您建议的代码仍将返回零。我已尝试不将Persegi
类调用到Kubus
类。但结果是一样的,体积值仍然是null@bbqapps同样,您需要在Kubus
实例上调用setssi()
。否则,在方法中用于获取面积和体积的getSisi()
,将返回零。
public class Kubus extends Persegi {
Persegi psg = new Persegi();
public double getVolume() {
return psg.getLuas() * psg.getSisi();
}
public Persegi getPsg() {
return psg;
}
public void setPsg(Persegi psg) {
this.psg = psg;
}
}
Persegi persegi = new Persegi();
Kubus kubus = new Kubus();
Scanner nilai = new Scanner(System.in);
System.out.print("Masukkan nilai sisi = ");
persegi.setSisi(nilai.nextInt());
kubus.getPsg().setSisi(3.0); // assign 3.0 to sisi attribute of kubus object
System.out.println("Luas = "+persegi.getLuas());
System.out.println("Volume = "+kubus.getVolume());
Masukkan nilai sisi = 4
Luas = 16.0
Volume = 27.0