简体   繁体   English

超类使用 Java 中的构造函数的默认值覆盖子类

[英]Superclass overriding Subclass with default values from constructor in Java

I have an assignment and my superclass default values always override the values I pass in the Test main method.我有一个作业,我的超类默认值总是覆盖我在 Test 主方法中传递的值。 In the debugger, i see the passing of the productNumber(1234) and productTitle("Daughter"), but then it's overridden with the default values.在调试器中,我看到 productNumber(1234) 和 productTitle("Daughter") 的传递,但随后它被默认值覆盖。 Any thoughts, i keep making minor changes, checking for changes, still the same results.任何想法,我一直在做微小的改变,检查变化,仍然是相同的结果。

Product Superclass产品超类

public abstract class Product {
    private int productNumber;
    private String productTitle;
   
//Two constructors required
    public Product(){
        productNumber = 0;
        productTitle = "";
    }
    
    public Product(int productNumber, String productTitle) {
        this.productNumber = productNumber;
        this.productTitle = productTitle;
    }
  

    public void setProductNumber(int productNumber) {
        this.productNumber = productNumber;
    }

    public int getProductNumber() {
        return productNumber;
    }

    public void setProductTitle(String productTitle) {
        this.productTitle = productTitle;
    }
        
    public String getProductTitle() {
        return productTitle;
    }

    //Override toString() required
    @Override
    public String toString() {
        return productNumber + " " + productTitle;
    }
    
    // Required Product class declares abstract method with this signature: public String getDisplayText()
    public abstract String getDisplayText();
    
    //Override equals() required
    @Override
    public boolean equals(Object object) {
        if (object instanceof Product)  {
            Product product2 = (Product) object;
            if (productNumber == (product2.getProductNumber()) &&
                productTitle.equals(product2.getProductTitle())){
                    return true;
            }
        }
        return false;
    }  
}

Music Subclass extends Product Superclass音乐子类扩展了产品超类

public class Music extends Product {
    private String artist;
    private String style;
    private String medium;

    public Music() {
        super();
        artist = "";
        style = "";
        medium = "";
    }

    public Music(int productNumber, String productTitle, String artist, String style, String medium) {
        super();
        this.artist = artist;
        this.style = style;
        this.medium = medium;
    }


    public String getArtist() {
        return artist;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }
    public String getStyle() {
        return style;
    }

    public void setStyle(String style) {
        this.style = style;
    }

    public String getMedium() {
        return medium;
    }

    public void setMedium(String medium) {
        this.medium = medium;
    }

    @Override
    public String getDisplayText() {
        return super.toString() + " by " + artist + " " + style + " " + medium;
    }
 
    @Override
    public boolean equals(Object object){
        if (object instanceof Music){
            Music m = (Music) object;
            if (artist.equals(m.getArtist()) &&
                style.equals(m.getStyle()) &&
                medium.equals(m.getMedium())){
                    return true;
            }
        }
        return false;
    }
}

Print String打印字符串

public class Test {

    public static void main(String[] args) {
        // Expected result: 1234 Daughter by Pearljam Alternative online
        Music music1 = new Music(1234,"Daughter", "Pearljam","Alternative","online");
        System.out.println(music1.getDisplayText());
    }
    
}

you are not passing values from subclass to your parentclass您没有将值从子类传递给父类

instead of super() you need to do below -而不是 super() 你需要在下面做 -

super(productNumber,productTitle);

update needed in your code:-您的代码中需要更新:-

public Music(int productNumber, String productTitle, String artist, String style, String medium) {
        super(productNumber,productTitle);
        this.artist = artist;
        this.style = style;
        this.medium = medium;
    }

You need to pass productNumber and productTitle in the super(..., ...) call inside the Music constructor up to the parent class.您需要将Music构造函数内的super(..., ...)调用中的productNumberproductTitle传递给父 class。

You need to invoke你需要调用

super(productNumber, productTitle)

inside the Music constructor to pass the parameters to its parent.在 Music 构造函数中将参数传递给其父级。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM