簡體   English   中英

Java繼承-類型子類

[英]Java inheritance — type subclasses

這更多是關於如何設計概念的

  1. Post類應作為具有所有公共屬性的基本類工作-具體類
  2. 問與答擴展了Post類。 它們具有Post的所有屬性以及特定於它們的屬性。
  3. 可以有不同類型的問題,例如UserAskedQuestion或BookQuestion-再次擴展了Question(具體類)----這里是3級繼承(UserAskedQuestion-> Question-> Post)

    這是我想要實現的目標:所有這些實體都存儲在數據庫中,我想從那里獲取(可以是cassandra或Mysql),因此想法是,用戶的一行介紹將保存為帖子,如果這樣用戶提出問題,它將被存儲為userAskedQuestion。 但是現在,如果我想知道該用戶發布的所有帖子,則應同時包含該帖子(一個襯里)以及(詢問的問題)

問題:

  1. 擁有3級繼承是件好事嗎? 因為我已經讀了很多書,所以繼承會使代碼復雜化,但是目前我無法找到任何其他解決方案。
  2. 我應該如何嘗試實現它,以便如果我獲取帖子,則應獲取所有帖子,問題/答案及其子類型,如果我獲取問題,則應獲取所有問題和問題子類型?
  3. 如果不是繼承,還有其他方法可以實現這種行為嗎?

問題1

是的,當然,多級繼承將為您提供更好的設計。 我認為,寧可讓事情復雜化,也可以為您提供更高的High CohesionLess Coupling 通過這種設計,您將獲得GRAPS Information Expert模式。

問題2

請參閱帶有示例的Java中的示例多級繼承


評論問題的答案:從DB作為Post類獲取對象Post您可以使用Java Java Doc的 instanceof運算符:類型比較運算符instanceof

public void doSomething(Post param) {
  if( param instanceof Question ) {
    System.out.println("param is a Question ");
  }
  else if( param instanceof Answer) {
    System.out.println("param is an Answer");
  }
 // Even you can check for whether its UserAskedQuestion or BookQuestion also
}

我認為, Decorator模式是必經之路。

使發布成為界面。 作為實現Post的抽象類的問答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM