Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当子类扩展到父类java继承时,不获取返回值_Java_Inheritance - Fatal编程技术网

当子类扩展到父类java继承时,不获取返回值

当子类扩展到父类java继承时,不获取返回值,java,inheritance,Java,Inheritance,我是一名初学者,我正在努力学习java中的继承概念,我制作了一个计算继承面积的程序​​一个正方形和一个立方体的体积,我把立方体类扩展到正方形类 方形(父级) 立方体(子体) 但是当我在主类中打印值时,子类不会从我在父类中创建的方法中获取值 主类 public class MainProgram { public static void main(String[] args){ Persegi persegi = new Persegi(); Kubus kubus =

我是一名初学者,我正在努力学习java中的继承概念,我制作了一个计算继承面积的程序​​一个正方形和一个立方体的体积,我把立方体类扩展到正方形类

方形(父级)

立方体(子体)

但是当我在主类中打印值时,子类不会从我在父类中创建的方法中获取值

主类

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
的任何属性。因此,Java
0.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