Java Programming - Declarations and Access Control - Discussion

3. 

interface Base 
{
    boolean m1 ();
    byte m2(short s);
}
which two code fragments will compile?
  1. interface Base2 implements Base {}
  2. abstract class Class2 extends Base
    { public boolean m1(){ return true; }}
  3. abstract class Class2 implements Base {}
  4. abstract class Class2 implements Base
    { public boolean m1(){ return (7 > 4); }}
  5. abstract class Class2 implements Base
    { protected boolean m1(){ return (5 > 7) }}

[A]. 1 and 2
[B]. 2 and 3
[C]. 3 and 4
[D]. 1 and 5

Answer: Option C

Explanation:

(3) is correct because an abstract class doesn't have to implement any or all of its interface's methods. (4) is correct because the method is correctly implemented ((7 > 4) is a boolean).

(1) is incorrect because interfaces don't implement anything. (2) is incorrect because classes don't extend interfaces. (5) is incorrect because interface methods are implicitly public, so the methods being implemented must be public.


Prashant said: (Jun 13, 2013)  
Doubt about option 4 as how can abstract class define any method?

Siddhesh said: (Mar 14, 2015)  
@Prashant.

Abstract class means 0 to 100% abstraction. That's why abstract class can also give method implementations. If not then it will be same as that of interface. Even if we declare class abstract which actually don't have any abstract method will work.

Hugo said: (Apr 11, 2017)  
abstract class Class2 implements Base
{ protected boolean m1(){ return (5 > 7) }}

(5) Needs semicolon after the return statement, otherwise, it can make it too easy.

Divyesh said: (Dec 7, 2017)  
Why is there no implementation for byte m2 (short s);?

Dina said: (Dec 7, 2021)  
Why is there no implementation for byte m2 (short s);?

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.