2013-08-24 4 views
0

Я новичок в Java, и я понимаю основные базовые концепции наследования. У меня есть вопрос относительно ссылок через суперкласс. Поскольку методы класса, унаследованные от суперкласса или реализованные с использованием интерфейса, можно ссылаться через ссылку на суперкласс (интерфейс или класс). Как это будет работать, когда и расширение, и реализация связаны с классом?Ссылка на ссылку супер класса/интерфейса - Java

class A { 
    void test() { 
    System.out.println("One"); 
    } 
} 

interface J { 
    void first(); 
} 

// This class object can referenced using A like A a = new B() 
class B extends A { 
    // code  
} 

// This class object can referenced using J like J j = new B() 
class B implements J { 
    // code 
} 

// my question is what happens in case of below which referencing for runtime polymorphism? 
class B extends A implements J { 
    // code 
} 

который не может скомпилировать с:

 
Main.java:16: error: duplicate class: B 
class B implements J { 
^ 
Main.java:21: error: duplicate class: B 
class B extends A implements J { 
^ 
2 errors 
+0

Вы можете дайте пример того, что вы имеете в виду? – arshajii

+0

Непонятно, что вы просите. Пример? –

+0

Пожалуйста, проверьте ссылку. , http://ideone.com/7xRRdR – user2713902

ответ

0

При использовании метода суперкласса и методов интерфейса могут быть некоторые различия, особенно если вы используете super для их вызова. Рассмотрим эти интерфейсы/классы:

public interface MyIFace { 
    void ifaceMethod1(); 
} 


public class MyParentClass { 
    void parentClassMethod1(); 
} 

public class MyClass extends MyParentClass implements MyIFace { 

    public void someChildMethod() { 
     ifaceMethods(); // call the interface method 
     parentClassMethod1(); // call the parent method just like you would another method. If you override it in here, this will call the overridden method 
     super.parentClassMethod1(); // you can use for a parent class method. this will call the parent's version even if you override it in here 
    } 

    @Override 
    public void ifaceMethod1() { 
     // implementation 
    } 

} 

public class AnExternalClass { 
    MyParentClass c = new MyClass(); 
    c.parentClassMethod1(); // if MyClass overrides parentClassMethod1, this will call the MyClass version of the method since it uses the runtime type, not the static compile time type 
} 

В общем, вызов метода без super будет вызывать метод, реализованный вариант выполнения класса (независимо от того, является ли метод из класса или интерфейса)

+0

Как это работает, если я скажу MyIFace mif = new Myclass()? – user2713902

+0

Назовите версию Myclass. Для полиморфных вызовов используется только тип времени выполнения. –

0

Как она будет работать, когда и расширяет и реализует вовлекаются с классом?

Предполагая, что это ваш вопрос.

extends ключевое слово предназначено для расширения суперкласса.

The инвентарем для реализации интерфейса


Разница между интерфейсом и суперкласса, что в интерфейсе вы не можете указать конкретную реализацию в целом (только его «интерфейс» - Интерфейсы не могут быть созданы, но реализованы). Таким образом, вы можете указать только методы, которые вы хотите использовать, но не реализовывать их в своем проекте в том же смысле.

Смежные вопросы