2010-07-14 2 views
0

Рассмотрим:Java-SCJP вопрос

class Building { 
    Building() { 
     System.out.print("b "); 
    } 
    Building(String name) { 
     this(); 
     System.out.print("bn "+name); 
    } 
} 
public class House extends Building { 
    House() { 
     System.out.print("h "); 
    } 
    House(String name) { 
     this(); 
     System.out.print("hn "+name); 
    } 
    public static void main(String a[]) { 
     new House("x "); 
    } 
} 

Для вышеприведенной программы, я думал, что выход должен быть ч кп х. Но выход идет как b h hn x.

Почему?

Позже

public class TestDays { 

    public enum Days { 
     MON,TUE,WED 
    }; 
    public static void main(String []args) { 

     for(Days d : Days.values()) 
     ; 
     Days [] d2=Days.values(); 
     System.out.println(d2[2]); 

    } 

} 

Я не могу понять выше программы. Пожалуйста, помогите мне.

class Mammal { 

    String name="furry"; 
    String makeNoise() { 
     return "generic noise"; 
    } 

} 

class Zebra extends Mammal { 

    String name="stripes"; 
    String makeNoise() { 
     return "bray"; 
    } 

} 
public class ZooKeeper { 

    public static void main(String args[]) { 
     new ZooKeeper().go(); 
    } 
    void go() { 

     Mammal m=new Zebra(); 
     System.out.println(m.name+m.makeNoise()); 

    } 

} 

В вышеуказанной программе makeNoise() переопределяется. И поэтому выход должен быть полосатым. Но выход - пушистый брей.

+2

Вы задали три несвязанных вопроса за один раз. Это делает их беспорядочными. В будущем задайте каждый вопрос как отдельный SO-вопрос. –

ответ

3

Задача 1:

Я думал, что выход должен быть ч кп х. Но выход идет как b h hn x.

Вы пропускаете факт, что House() конструктор неявно вызывающую не-арг конструктор Building.

Задача 2:

Я не могу понять выше программы. Пожалуйста, помогите мне.

Он печатает третье значение перечисления. Пустой for-loop выглядит немного странно, но я подозреваю, что это всего лишь ошибка ввода. Если есть что-то еще, что вы не понимаете, вам придется сказать, что это такое. (Я оставил свой ум чтения шлем дома ... и Джон Скит спит.)

Задача 3:

В приведенной выше программе, makeNoise() переопределяется. И поэтому выход должен быть полосатым. Но выход - пушистый брей.

Причина вы видите «пушистого» вместо «полосы» является то, что атрибуты класса являются НЕ преодолено. Экземпляр Zebra фактически имеет два поля: name, и ваш код привязывается к тому или другому в зависимости от объявленного типа ссылочной переменной. В этом случае объявленный тип m равен Mammal, поэтому вы получаете версию имени млекопитающего.

2

1.- появляется б первых, потому что этот код:

House() { 
    System.out.print("h "); 
} 

Сначала не называют суперкласс не ARGS конструктор (это сделано компилятором), так что вы должны думать об этом, как:

House() { 
    super(); 
    System.out.print("h "); 
} 

2- вы как раз объявить Java enum

для цикла итерации все возможные значения (пН, ВТ, СР)

for(Days d : Days.values()) 
    ; 

Но он ничего не делает (см. что значит «ничего»)

И затем, создает массив с этими значениями

Days [] d2=Days.values(); 

Чтобы, наконец, печать 3-е место (массивы в Java равны нулю основе, поэтому 0-1-2 является третьей позиции)

System.out.println(d2[2]); 

который печатает WED

3.- См Stephen C ответ. Вы получаете атрибут суперкласса.