Подтвердить что ты не робот

Интерфейс как тип в Java?

От Учебники Java:

В Java класс может наследовать только один класс, но он может реализовать более одного интерфейса. Поэтому объекты могут иметь несколько типов: тип их собственного класса и типы всех интерфейсов, которые они реализуют. Это означает, что если объявлена ​​ переменная тип интерфейса, его значение может ссылаться на любой объект, который созданный из любого класса, который реализует интерфейс.

Может ли кто-нибудь предоставить мне базовый псевдо-тип для этого. Я не понял смелые строки.

4b9b3361

Ответ 1

Объявите два интерфейса и класс, который реализует их оба:

interface I1 { }

interface I2 { }

class C implements I1, I2 { }

объекты могут иметь несколько типов

В следующем коде видно, что экземпляр C имеет тип C, а также I1 и I2:

C c = new C();

boolean isC = (c instanceof C);   //true
boolean isI1 = (c instanceof I1); //true
boolean isI2 = (c instanceof I2); //true

Теперь давайте объявим класс B, который также реализует I1:

class B implements I1 { }

Если переменная объявлена ​​типом интерфейса, ее значение может ссылаться на любой объект, который создается из любого класса, реализующего интерфейс.

Если мы объявим переменную типа I1, мы можем установить ее в экземпляр C, а затем переназначить ее экземпляру B:

I1 i1 = new C();
i1 = new B();

Мы также можем переназначить его экземпляру D, где D extends C:

i1 = new D();

...

class D extends C { }

Ответ 2

Рассмотрим следующий пример:

Serializable s = new ArrayList();

В Java это действительный код, хотя Serializable является интерфейсом, потому что ArrayList реализует Serializable. Поэтому в этом случае мы обрабатываем s как переменную типа Serializable.

Теперь предположим, что мы следуем приведенному выше коду со следующим:

s = "String object";

Это также верно, потому что String также реализует Serializable. Поскольку мы объявили s как тип Serializable, он может указывать на любой объект, который реализует этот интерфейс.

Ответ 3

объекты могут иметь несколько типов

Рассмотрим следующий фрагмент:

public class MyClass extends ParentClass implements Interface1, Interface2 {    
    //some code    
}

Этот класс может использоваться в разных местах следующим образом:

MyClass m1 = new MyClass();
ParentClass p = new MyClass();
Interface1 i1 = new MyClass();
Interface2 i2 = new MyClass();

variable объявляется типом интерфейса, его значение может ссылаться на любой объект, который создается из любого класса, реализующего интерфейс.

Рассмотрим две последние строки в предыдущем фрагменте, переменная типа Interface1 может ссылаться на любой объект, реализующий этот интерфейс, поэтому, если у нас есть другой класс, реализующий Interface1, скажем MyClass2, тогда

Interface1 i1 = new MyClass();
Interface1 i2 = new MyClasss2();
i1 = i2;
i1 = new MyClass2();

Все предыдущие назначения действительны, поскольку MyClass и MyClass2 реализуют интерфейс1

Ответ 4

class Ball extends Rubber implements Jumping, Rolling, Squeezing {
   public void jump(){}
   public void roll(){}
   public void squeeze(){}
}

Ball b = new Ball();
Jumping j = new Ball();
j.jump();

Ответ 5

Заявления, которые вы указываете (откуда?), являются истинными, но вводящими в заблуждение - объекты уже имеют несколько типов без интерфейсов.

Например, "bimmelim" имеет тип String, но также имеет тип Object. Интерфейсы не меняются, за исключением того, что "bimmelim" также имеет тип Serializable, CharSequence и другие.

На самом деле, это, возможно, спорно, стоит ли говорить, что "bimmelim" "имеет" тип Object, но, конечно, ссылка на него будет вписываться в Object переменные.

Если переменная объявляется типом интерфейса... например

CharSequence x ;

... тогда его значение может ссылаться на объект String, такой как "bimmelim", или это может быть StringBuffer, который является другим типом, который реализует CharSequence.

Ответ 6

String реализует несколько интерфейсов, поэтому он имеет несколько типов:

String s = "A String";
Comparable<String> comp = s;
CharSequece cs = s;
Serializable ser = s;

Интерфейс CharSequence реализуется несколькими классами, поэтому ссылка CharSequence может содержать все типы объектов:

CharSequence cs = "A String";
cs = new StringBuilder();
cs = new Segment();

Ответ 7

объекты могут иметь несколько типов

Пример:

public class Foo implements Runnable, Callable<Integer> {
  public void run() {}
  public Integer call() {return 1;}
}

Foo foo = new Foo();
Runnable r = foo;
Callable<Integer> c = foo;

Пример:

Если переменная объявлена ​​типом интерфейса, ее значение может ссылаться на любой объект, который создается из любого класса, реализующего интерфейс

Runnable r = new Foo();
r = Thread.currentThread();   //Thread implements Runnable

Ответ 8

Очень простой пример -

List<String> list1=new ArrayList<String>();

Так как ArrayList реализует List, поэтому мы можем использовать переменную интерфейса List i.e list1 для ссылки на объект, созданный Arraylist.

Ответ 9

То, что следующее правильное назначение:

class AClass implements AInterface {
}


AInterface var = new AClass();

Ответ 10

Рассмотрим следующие определения классов и интерфейсов:

public class A { }

public class B extends A implements I { }

public interface I { }

Следующие утверждения являются законными:

A first = new A();
B second = new B();
A third = new B();
I fourth = new B();

Поскольку B реализует я и расширяет A, его можно использовать как значение в любом месте, где ожидается "I" или "A".

Ответ 11

Возьмем Collection интерфейс из стандартных библиотек Java в качестве примера. Любая переменная, объявленная как тип Collection, может быть затем назначена объекту класса, который реализует интерфейс Collection, например. ArrayList, Stack,... см. связанный документ для получения дополнительных примеров.