【问题标题】:Java Inheritance and Understanding Interface ClassesJava 继承和理解接口类
【发布时间】:2023-03-19 09:05:01
【问题描述】:

我正在处理我已经设置的一个简短的 java 任务。

问题如下:

设计和编写类来模拟库中不同类型的出版物。仔细考虑不同类型的出版物,例如书籍和杂志。将所有出版物类型共有的所有属性和方法放在一个超类中,然后适当地扩展这个超类以创建一组子类。

确保在类中包含适当的构造函数、getter、setter 和自定义方法。在适当的情况下使用方法重载和覆盖。

在您的设计和类代码中最大限度地利用继承。

在您的设计和编码中实现以下接口类:

+ getPublisher() : String
+ getPublicationTitle() : String
+ getPrice : float
+ setPublication(publisherIn: String, titleIn:String, priceIn:float) : void

所以我已经尽我所能回答了,请任何人阅读它并检查我是否走在正确的轨道上并理解我要做什么,看起来很简单是正确的吗? 哦,javadocs 还没有完成 [=

public interface PublicationInterface
{
    /**
     * Returns the book publisher name (as a String) 
     */
    public String getPublisher();

    /**
     * Returns the book publication title (as a String)
     */
    public String getPublicationTitle();

    /**
     * Returns the book price (as a float)
     */
    public float getPrice();

    /**
     * Sets the book publication details.
     * 
     * @param publisherIn   The Book Publisher (as a String)
     * @param titleIn       The Book Title (as a String)
     * @param priceIn       The Book Price (as a float)
     */
    public void setPublication(String publisherIn, String publicationTitleIn, float priceIn);
}

abstract public class Publications implements PublicationInterface
{
   // Attributes
  protected String publisher;
  protected String publicationTitle;
  protected float price;

        public Publications(String publisherIn, String publicationTitleIn, float priceIn)
            {
                publisher = publisherIn;
                publicationTitle = publicationTitleIn;
                price = priceIn;
            }

        public String getPublisher()
            {
                return (publisher);
            }

        public String getPublicationTitle()
            {
                return (publicationTitle);
            }

        public float getPrice()
            {
                return (price);
            }

        public void setPublication(String publisherIn, String publicationTitleIn, float priceIn)
            {
                publisher = publisherIn;
                publicationTitle = publicationTitleIn;
                price = priceIn;
           }

}

public class Magazine extends Publications
{
    String editor;
    String date;

    public Magazine(String publisherIn , String publicationTitleIn, float priceIn, String editorIn, String dateIn)
        {
            super (publisherIn , publicationTitleIn, priceIn);

            editor = editorIn;
            date = dateIn;
        }

    public void setPublication(String publisherIn, String publicationTitleIn, float priceIn)
        {
            publisherIn = publisher;
            publicationTitleIn = publicationTitle;
            priceIn = price;
        }

    public String getEditor()
        {
            System.out.println("The editor of this magazine is " + editor);
            return (editor);
        }

    public String getDate()
        {
            System.out.println("The publication date of this magazine is " + date);
            return (date);
        }

    public String getPublisher()
        {
            System.out.println("The publisher of this magazine is " + publisher);
            return (publisher);
        }

    public String getPublicationTitle()
        {
            System.out.println("The publication title of this magazine is " + publicationTitle);
            return (publicationTitle);
        }

    public float getPrice()
        {
            System.out.println("The price of this magazine is £" + price);
            return (price);
        }

}

public class ReferenceMaterial extends Publications
{

    String genre;
    String subject;

    public ReferenceMaterial(String publisherIn , String publicationTitleIn, float priceIn,     String genreIn, String subjectIn)
        {
            super (publisherIn , publicationTitleIn, priceIn);            

            genre = genreIn;
            subject = subjectIn;
        }

    public String getGenre()
        {
            System.out.println("The genre of this material is " + genre);
            return (genre);
        }

    public String getSubject()
        {
            System.out.println("The subject of this material is " + subject);
            return (subject);
        }

    public String getPublisher()
        {
            System.out.println("The publisher of this material is " + publisher);
            return (publisher);
        }

    public String getPublicationTitle()
        {
            System.out.println("The publication title of this material is " + publicationTitle);
            return (publicationTitle);
        }

    public float getPrice()
        {
            System.out.println("The price of this material is £" + price);
            return (price);
        }
}


public class Book extends Publications
{
    int pageNumber;
    String author;

    public Book(String publisherIn , String publicationTitleIn, float priceIn, int pageNumberIn,     String authorIn)
        {
            super (publisherIn , publicationTitleIn, priceIn);

            pageNumber = pageNumberIn;
            author = authorIn;

        }

    public int getPageNumber()
        {
            System.out.println("The number of pages in this book are " + pageNumber);
            return (pageNumber);
        }

    public String getAuthor()
        {
            System.out.println("The author of this book is " + author);
            return (author);
        }

    public String getPublisher()
        {
            System.out.println("The publisher of this book is " + publisher);
            return (publisher);
        }

    public String getPublicationTitle()
        {
            System.out.println("The publication title of this book is " + publicationTitle);
            return (publicationTitle);
        }

    public float getPrice()
        {
            System.out.println("The price of this book is £" + price);
            return (price);
        }

}

public class TestLibrary
{

    public static void main()
      {     
        Magazine magazine1 = new Magazine ("SanYonic Publishing", "Ayup Magazine", 99, "Yeshumenku Suni", "12/09/2011");

        System.out.println();
        magazine1.getEditor();
        magazine1.getDate();
        magazine1.getPublisher();
        magazine1.getPublicationTitle();
        magazine1.getPrice();
        System.out.println();

        ReferenceMaterial referenceMaterial1 = new ReferenceMaterial ("Dorling kindesy", "killer Sharks In The Solent", 200, "Nature", "Sharks");

        referenceMaterial1.getGenre();
        referenceMaterial1.getSubject();
        referenceMaterial1.getPublisher();
        referenceMaterial1.getPublicationTitle();
        referenceMaterial1.getPrice();
        System.out.println();

        Book Book1 = new Book ("Hodder & Soughton", "One Day", 75, 1105, "David Nicholls");

        Book1.getPageNumber();
        Book1.getAuthor();
        Book1.getPublisher();
        Book1.getPublicationTitle();
        Book1.getPrice();
        System.out.println();        
      }

}

【问题讨论】:

  • 如果这是作业,请使用作业标签。
  • @MiserableVariable 作业标签?哦,你的意思是在底部的标签中,好的,我可以编辑标签吗,对不起
  • @MiserableVariable 完成,谢谢!
  • 阅读完整的问题后,我意识到这样的开放式问题不适合 stackoverflow。请参阅常见问题解答。但我会告诉你 Publications 类应该被称为 Publication 并且你将方法体缩进两次。这不是一个很复杂的作业,直接提交,等待更难的问题在这里提问。

标签: java inheritance interface


【解决方案1】:

这看起来不错,只是您根本不需要该界面。作业里没看到提到,子类化肯定没必要。

接口用于由一组不相关的类实现的通用方法(特别是不属于类层次结构的一部分)。

由于您的类都来自父 Publications 类,因此在这种情况下不需要像 PublicationsInterface 这样的东西。超类很好地填补了这个角色。

Publication p = new Book();
p.setPublisher("Acme Books");

【讨论】:

  • 根据OP的描述,我认为硬件需要使用接口,但我同意。
  • @Will 谢谢,关于接口类,问题的最后一部分确实说“在您的设计和编码中实现以下接口类”。这让我感到困惑,为什么在不需要的时候,或者我可以用不同的方式来使用接口类吗?!
  • 我会按照你的方式保持它,一些教练在他们的要求方面非常挑剔,这样你就“安全”了。在现实世界中,您实际上并不需要 Will 提到的界面。
【解决方案2】:

您的设计并非不合理,尽管您的命名约定有点多余(您不需要使用Interface 后缀命名接口)。此外,请坚持使用单数名词作为类名,而不是从 Publications 切换到 Book

【讨论】:

    【解决方案3】:

    这是一个使用抽象类的例子。

        public abstract class Publication 
        {
          private String _ISBN;
          private String _Title;
          private String _Publication;
          private float _Price;
    
          public String getISBN() { return _ISBN;}
          public void setISBN(String isbn)
          {
            _ISBN = isbn;
          }
    
          public String getTitle() { return _Title;}
          public void setTitle(String title)
          {
            _Title = title;
          }
    
          public String getTitle() { return _Title;}
          public void setTitle(String title)
          {
            _Title = title;
          } 
    
          public String getPublisher() { return _Publication;}
          public void setPublisher(String publication)
          {
            _Publication= publication;
          } 
    
           public float getPrice() { return _Price;}
           public void setPrice(float price)
           {
               _Price= price;
           } 
        }
    
        public class Book extends Publication
        {
    
        }  
    
        public class Magazine extends Publication
        {
    
        }  
    
    //using the class
    Book book = new Book();
    book.getPrice();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多