تابع های Abstract در کلاس های concrete در جاوا

تابع های Abstract در کلاس های concrete در جاوا

نکته: همه تابع های Abstract که توسط یک کلاس concrete به ارث برده می شوند باید دارای پیاده سازی های مشخص باشند، در غیر این صورت کد نمی تواند کامپایل شود.

قطعه کد زیر به شما داده می شود:

interface Text {
    default String getContent() { return "Blank"; }
    void setContent(String txt);
    void spellCheck() throws Exception;
}

abstract class Prose {
    public abstract void setAuthor(String name);
    public void spellCheck() {
        System.out.print("Do generic prose spellcheck");
    }
}

class Novel extends Prose implements Text {
  // line n1
}

کدام قطعه کد زمانی که در قسمت line n1 قرار بگیرد باعث می شود که دو خط زیر کامپایل و اجرا شود؟ (دو مورد انتخاب کنید)

A.

public void spellCheck() throws Exception { }	

B.

String getContent() { return "Novel"; }	

C.

public String getContent() { return "Novel"; }	

D.

public void setAuthor(String a) { }	

E.

public void setContent(String txt) { }	

پاسخ:

کلاس Novel هیچ تابع abstract ندارد در نتیجه یک کلاس concrete هست. در نتیجه باید تمام متد های abstract که به ارث برده است به صورت مستقیم یا غیر مستقیم پیاده سازی کند. تمام تابع های در interface به صورت public می باشد و به صورت abstract تعریف شده اند. پس به این معنی هست که کلاس Text دو تابع abstract را تعریف کرده است که setContent و spellCheck می باشند. پس باید این دو تابع در Novel پیاده سازی شوند.

همچنین یک تابع default به اسم getContent ارائه می دهدکه این تابع concrete و abstract نیست. برای کلاسهای concrete این امکان وجود دارد که این تابع را پیاده سازی نکنند.

تا اینجا شما می دانید که Novel باید برای تابع های setContent و spellCheck پیاده سازی هایی را ارائه بدهد و این پیاده سازی ها باید لیست ورودی های درستی داشته باشد.

بیاید پیش برویم ببینیم کلاس Prose چه چیزی به Novel اضافه می کند.

کلاس Prose یک تابع abstract به نام setAuthor دارد که کلاس Novel باید آنرا پیاده سازی کند. پس تا اینجای کار ۳ متد وجود دارد که Novel باید آنها را پیاده سازی کند. در کلاس Prose تابعی وجود دارد به نام spellCheck که هم نام و هم آرگومان با spellCheck در کلاس Text می باشد. بنابراین کلاس Novel می تواند این تابع را پیاده سازی نکند.

تا اینجا پس متوجه شدیم که باید ۲ تابع به نام های setAuthor و setContent حتما پیاده سازی کنیم. پیاده سازی این دو هم در گزینه های D و E می باشد.

نتیجه: گزینه های صحیح D و E است.

دیدگاهتان را بنویسید