как правильно использовать метод instanceof

Дана задача: Создать статический метод printMagazines(Printable[] printable) в классе Magazine, который выводит на консоль названия только журналов. Создать статический метод printBooks(Printable[] printable) в классе Book, который выводит на консоль названия только книг. Используем оператор instanceof. Метод написала, но его выполнение приводит к ошибке. Помогите пожалуйста :) Код:

public class Main {
    public static void main(String[] args) {
 Printable[] test=new Printable[3];
 test[0]=new Book();
 test[1]=new Magazine("keke");
 test[2]=new Book();
        int k=0;
 for (Printable i:test){
     test[k].print();
k++;
 }
     **if   (test[k] instanceof Magazine){
         int l=0;
       ((Magazine) test[k]).printMagazines(test);
         k++;
     }**
    }}

public interface Printable {
    Printable print();
}

public class Book implements Printable {
    String name;
    @Override
    public Printable print() {
        System.out.println("1");
        return null;
    }
   public void printBooks(Printable[] printable){
       Printable b=print();
       System.out.println(b);
   }
}

public class Magazine implements Printable {
String name;
Magazine(String name){
    this.name=name;
}
    @Override
    public Printable print() {
        System.out.println("2");
        return null;
    }
   public void    printMagazines(Printable[] printable){
       System.out.println(name);
    }
}

Ошибка: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at Main.main(Main.java:19)

Заранее спасибо!


Ответы (1 шт):

Автор решения: Igor
public class Magazine implements Printable {
  ...
  public static void printMagazines(Printable[] printables) {
    for (Printable p: printables) {
      if (p instanceof Magazine)
        p.print();
    }
  }
}

Magazine.printMagazines(test);
→ Ссылка