2012-04-12 5 views
1

У меня есть следующие классы, определенные ...Как переопределить метод в завернутом классе?

class Class2 implements ICommon { 
    .... 
    ICommon wrappedClass; 
    //delegate interface methods to wrapped class 
} 

class Class1 implements ICommon { 
    //interface methods 
    //specific methods 
    public void method1() { 
     ...... 
    } 
} 

мне нужно сделать Class1 перезаписать method1() из Class2, однако я все еще хочу реализовать интерфейс ICommon. Есть ли способ, которым это может быть достигнуто?

+0

Вашего вопроса на самом деле не имеет большого смысла. Что вы подразумеваете под «методом переопределения класса Class1 в классе 2»? Я предполагаю, что метод1 не является частью ICommon, основываясь на комментариях в ваших примерах, но это означает, что method1 отсутствует в Class2, поэтому его переопределение там не имеет логического смысла. – Jules

+0

Если на ваш вопрос был дан ответ, или он больше недействителен, отметьте «галочкой», чтобы выбрать наиболее подходящий ответ, чтобы все знали, что проблема решена. Благодарю. – wattostudios

ответ

5

Вы не можете переопределить без расширения. Class2 должен расширить Class1, тогда вы сможете переопределить.

class Class2 extends Class1 // no need for implements anymore, because class1 already implements 
{ 

    @Override 
    public void method1() 
    { 

    } 
} 

Знайте, что этот дизайн означает, что каждый Class2 является Class1, так же как каждый Ant является ошибкой.

1
class Class1 extends Class2{ 
    ...method1((){ 
      ...... 
     } 
} 

Class2 уже реализует интерфейс IComm, поэтому Class1 косвенно реализует его.

1

ли вы имеете в виду, просто:

class Class2 extends Class1 implements ICommon { 
.... 
    ICommon wrappedClass; 
    //delegate interface methods to wrapped class 

    @Override 
    public void method1() {...} 
} 

Это должно работать нормально, нет? Вам даже не нужен implements ICommon, так как Class делает это уже, я просто положил его туда, чтобы было ясно, что это так.

Чтобы быть ясным, это не требует изменений в ICommon.

1

Вы могли бы сделать class1 Интерфейс ...

class Class2 implements ICommon, Class1 { 
    ICommon wrappedClass; 
} 

interface Class1 extends ICommon { 
    public void method1(); 
} 

Или сделать Class1 продлить Class2 (делая это, Class1 еще реализует ICommon потому что Class2 реализует ICommon) ...

class Class2 implements ICommon { 
    ICommon wrappedClass; 
} 

class Class1 extends Class2 { 
    public void method1() { 
    } 
}