Если у меня есть class A {
и class B extends A {
будетПодтипы Массивы
B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
распечатывают истинным или ложным?
Если у меня есть class A {
и class B extends A {
будетПодтипы Массивы
B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
распечатывают истинным или ложным?
JLS states что если B назначается A, то да, B [] присваивается A [].
Это открывает дверь к серьезным последствиям, хотя, продемонстрированные этим кодом:
class A {}
class B extends A {}
class C extends A {}
//...
B[] bs = new B[2];
A[] as = bs;
as[0] = new C(); //runtime error
B b = bs[0];
Этот код compiles but fails at runtime. Мы называем это отсутствием безопасности типов.
Неверный.
Массивы не выполняют те же правила, что и обычные объекты.
Ну, у вас был шанс 50/50, извините, что это не сработало для вас. –
Вы, вероятно, ошибочно принимаете массивы с помощью дженериков. –
Я помню последствия для безопасности типа и не помнил, как это было обработано. – Darron
Он напечатает true
.
// A.java
public class A {}
// B.java
public class B extends A {}
// Test.java
public class Test {
public static void main(String[] args) {
B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
}
}
При запуске:
> javac *.java && java Test
true
Что произошло, когда вы пробовали? –
У вас нет доступа к компилятору Java или к чему-то еще? –
Глупый меня. Слишком ленив, чтобы создать новый основной класс = ( –