Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Query regarding java Multiple Inheritance

Reply
Thread Tools

Query regarding java Multiple Inheritance

 
 
Amit Jain
Guest
Posts: n/a
 
      11-27-2009
Hi All,
I am new to Java and need your views for my query.

What will be the solution for implementint two Interface in a single
class A if these interfaces I1 and I2 are written as mentioned below:
interface I1{
void method ();
long square(long i);
}

interface I2{
String method();
long squareRoot(long i);
}

class A implements I1, I2{
void method(){
System.out.println("--- Hi ----");
}
// implementation of square() and squareRoot() method
}

Above implementation of interface in class A will never complies
because of "void method();" declared in both I1 and I2. And we want
the implementation of I1 and I2 in class A only. How can we acheive
this in such situations.

regards,
Amit J.
 
Reply With Quote
 
 
 
 
Lew
Guest
Posts: n/a
 
      11-27-2009
Amit Jain wrote:
> Hi All,
> I am new to Java and need your views for my query.
>
> What will be the solution for implementint two Interface in a single
> class A if these interfaces I1 and I2 are written as mentioned below:
> interface I1{
> void method ();
> long square(long i);
> }
>
> interface I2{
> String method();
> long squareRoot(long i);
> }
>
> class A implements I1, I2{
> void method(){
> System.out.println("--- Hi ----");
> }
> // implementation of square() and squareRoot() method
> }
>
> Above implementation of interface in class A will never complies
> because of "void method();" declared in both I1 and I2.


That is not a correct statement. 'void method()' is only declared in 'I1'.

> And we want the implementation of I1 and I2 in class A only.
> How can we acheive this in such situations.


Your problem is that 'method()' has incompatible return types in the two
interfaces, otherwise 'A' could happily implement both.

An interface is a declaration of type. As such, it makes promises about the
public face of any implementation. A class can satisfy the promises of any
number of interfaces as long as those promises don't contradict each other.

In your example, the promise made by 'I1' for 'method()' to return 'void'
contradicts the promise in 'I2' to return 'String'. No way an implementation
can keep both promises for the same-named method.

To do what you want, you're either going to have to give the 'method()' method
compatible return types in both interfaces, or change its name in at least one
of them.

<http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.5>
<http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.8>

--
Lew
 
Reply With Quote
 
 
 
 
Arne Vajhj
Guest
Posts: n/a
 
      11-27-2009
Amit Jain wrote:
> Hi All,
> I am new to Java and need your views for my query.
>
> What will be the solution for implementint two Interface in a single
> class A if these interfaces I1 and I2 are written as mentioned below:
> interface I1{
> void method ();
> long square(long i);
> }
>
> interface I2{
> String method();
> long squareRoot(long i);
> }
>
> class A implements I1, I2{
> void method(){
> System.out.println("--- Hi ----");
> }
> // implementation of square() and squareRoot() method
> }
>
> Above implementation of interface in class A will never complies
> because of "void method();" declared in both I1 and I2. And we want
> the implementation of I1 and I2 in class A only. How can we acheive
> this in such situations.


Java does not allow this construct. You need a workaround.

I once created the example below to illustrate a
possible workaround which I believe is a reasonable good
one.

Arne

========================

public class MultiInterf {
public static void main(String[] args) {
A o = new A();
System.out.println(o.asB().f());
System.out.println(o.asC().f());
}
}

interface B {
Object f();
}

interface C {
boolean f();
}

class A {
public Object fB() {
return null;
}
public boolean fC() {
return false;
}
public B asB() {
return new AB(this);
}
public C asC() {
return new AC(this);
}
private static class AB implements B {
private A real;
public AB(A real) {
this.real = real;
}
public Object f() {
return real.fB();
}
}
private static class AC implements C {
private A real;
public AC(A real) {
this.real = real;
}
public boolean f() {
return real.fC();
}
}
}
 
Reply With Quote
 
John B. Matthews
Guest
Posts: n/a
 
      11-27-2009
In article
<(E-Mail Removed)>,
Amit Jain <(E-Mail Removed)> wrote:

> I am new to Java and need your views for my query.
>
> What will be the solution for implementint two Interface in a single
> class A if these interfaces I1 and I2 are written as mentioned below:
> interface I1{
> void method ();
> long square(long i);
> }
>
> interface I2{
> String method();
> long squareRoot(long i);
> }
>
> class A implements I1, I2{
> void method(){
> System.out.println("--- Hi ----");
> }
> // implementation of square() and squareRoot() method
> }
>
> Above implementation of interface in class A will never complies
> because of "void method();" declared in both I1 and I2. And we want
> the implementation of I1 and I2 in class A only. How can we acheive
> this in such situations.


If the two methods named "method" are actually the same, derive A from
an abstract class that implements I1 & I2. See "When an Abstract Class
Implements an Interface":

<http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html>

For example,

public class AbstractInterface {

public static void main(String[] args) {
A a = new A();
System.out.println(a.method());
System.out.println(a.square(2));
System.out.println(a.cube(2));
}

interface I1 {
long square(long i);
}

interface I2 {
long cube(long i);
}

private static abstract class X implements I1, I2 {
public String method() {
return "Hi!";
}
}

private static class A extends X {

@Override
public long square(long i) { return i * i; }

@Override
public long cube(long i) { return i * i * i; }
}
}

--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
 
Reply With Quote
 
Sarkar
Guest
Posts: n/a
 
      11-27-2009
Thanks all for valuable inputs. Now things are more clear to me.

Thanks once again

regards, Amit J.
 
Reply With Quote
 
Arne Vajhøj
Guest
Posts: n/a
 
      11-28-2009
John B. Matthews wrote:
> In article
> <(E-Mail Removed)>,
> Amit Jain <(E-Mail Removed)> wrote:
>> I am new to Java and need your views for my query.
>>
>> What will be the solution for implementint two Interface in a single
>> class A if these interfaces I1 and I2 are written as mentioned below:
>> interface I1{
>> void method ();
>> long square(long i);
>> }
>>
>> interface I2{
>> String method();
>> long squareRoot(long i);
>> }
>>
>> class A implements I1, I2{
>> void method(){
>> System.out.println("--- Hi ----");
>> }
>> // implementation of square() and squareRoot() method
>> }
>>
>> Above implementation of interface in class A will never complies
>> because of "void method();" declared in both I1 and I2. And we want
>> the implementation of I1 and I2 in class A only. How can we acheive
>> this in such situations.

>
> If the two methods named "method" are actually the same,


They are not - they return different type.

Arne
 
Reply With Quote
 
John B. Matthews
Guest
Posts: n/a
 
      11-28-2009
In article <4b107f0b$0$283$(E-Mail Removed)>,
Arne Vajhøj <(E-Mail Removed)> wrote:

> John B. Matthews wrote:
> > In article
> > <(E-Mail Removed)>,
> > Amit Jain <(E-Mail Removed)> wrote:
> >> I am new to Java and need your views for my query.
> >>
> >> What will be the solution for implementint two Interface in a single
> >> class A if these interfaces I1 and I2 are written as mentioned below:
> >> interface I1{
> >> void method ();
> >> long square(long i);
> >> }
> >>
> >> interface I2{
> >> String method();
> >> long squareRoot(long i);
> >> }
> >>
> >> class A implements I1, I2{
> >> void method(){
> >> System.out.println("--- Hi ----");
> >> }
> >> // implementation of square() and squareRoot() method
> >> }
> >>
> >> Above implementation of interface in class A will never complies
> >> because of "void method();" declared in both I1 and I2. And we want
> >> the implementation of I1 and I2 in class A only. How can we acheive
> >> this in such situations.

> >
> > If the two methods named "method" are actually the same,

>
> They are not - they return different type.


Indeed, I was puzzled by the contradiction between the OP's statement
'"void method();" declared in both I1 and I2' and the divergent return
types you mention. My suggestion was intended to address the former
interpretation; your class MultiInterf addresses the latter.

I appreciate the OP responding, but I would enjoy hearing more about the
resolution.

--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
 
Reply With Quote
 
Roedy Green
Guest
Posts: n/a
 
      11-28-2009
On Thu, 26 Nov 2009 19:43:30 -0800 (PST), Amit Jain
<(E-Mail Removed)> wrote, quoted or indirectly quoted someone
who said :

>Above implementation of interface in class A will never complies
>because of "void method();" declared in both I1 and I2. And we want
>the implementation of I1 and I2 in class A only. How can we acheive
>this in such situations.


In Java, you can't have two methods that differ only in return type.
There is no Eiffelian rename technique to resolve such conflicts. You
have to manually rename the method in one of your interfaces.
--
Roedy Green Canadian Mind Products
http://mindprod.com
I mean the word proof not in the sense of the lawyers, who set two half proofs equal to a whole one, but in the sense of a mathematician, where half proof = 0, and it is demanded for proof that every doubt becomes impossible.
~ Carl Friedrich Gauss
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
inheritance, multiple inheritance and the weaklist and instance dictionaries Rouslan Korneychuk Python 8 02-10-2011 04:02 AM
Newbie query regarding Java abhishek.raju@gmail.com Java 6 02-09-2007 04:22 PM
CAML Query: Multiple Query Fields Issue Jon F. ASP .Net Web Services 0 05-12-2004 08:19 PM
Private access modifier and Inheritance (Inheritance implementation in Java) maxw_cc Java 1 12-21-2003 11:38 AM
Multiple inheritance equivanlent in Java/CSharp Hung Jung Lu Java 5 11-20-2003 12:06 AM



Advertisments