Średnio-zaawansowany test z języka Java

0

Cześć,
mam taki test z Javy jak poniżej. Bardzo proszę o sprawdzenie moich odpowiedzi - czy jest dobrze? Jeśli nie to proszę napisać gdzie zrobiłem byka i poprawkę :)

Pytania mogą być wielokrotnego wyboru.

1. Pola (zmienne) w interfejsie są:
a) zawsze tylko static
b) tylko final i static
c) zawsze tylko final
d) zależnie od wpisanych słów kluczowych przed polem

2. Metody (funkcje) w interfejsie są dostępne jako:
a) jako public lub pakietowe ale nie mogą być private i protected
b) mogą być o dowolnym dostępie, zależnie od słów kluczowych wpisanych przed polem i metodą
c) zawsze tylko public
d) public, pakietowe i protected ale nie private

3. W poniższym kodzie w wierszu 5 podaj instrukcję odwołującą się do pola z wiersza nr 2:
package P;
class A {
int x; // 2
class B {
int x ;
int xFromA = …...................... // 5
}
}

4. Tworzenie obiektu klasy B z poprzedniego pytania jest:
a) możliwe w dowolnej innej klasie
b) możliwe tylko w klasach pakietu P
c) niemożliwe w statycznych klasach z pakietu P
d) możliwe tylko wewnątrz klasy A
e) nie możliwe w metodach statycznych klasy A

5. Utwórz obiekt klasy ArrayList<> zawierający obiekty co najmniej klasy Koło.

6. Dodaj do ww. pojemnika jeden obiekt.

8. Napisz szablon klasy o nazwie Kolekcja, który przechowuje tablice obiektów nieokreślonego typu. Klasa Kolekcja ma zawierać:
a) konstruktor przyjmujący jako argument rozmiar tabicy
b) metodę dodajElement dodającą do tablicy jeden element typu zdefiniowanego jako parametr w szablonie

9. Dana jest klasa abstrakcyjna:
public abstract class Abs {
abstract int f();
}
napisać klasę anonimową zaczynając od wiersza podanego poniżej:
Abs abs = …............

10. Podać przykład implementacji interfejsu.

Moje odpowiedzi:
1. b
2. d
3. A.x
4. c
5. ArrayList<Kolo> lista = new ArrayList<Kolo>();
6. lista.add(new Kolo());
8. class Kolekcja<T>{
T t;
Kolekcja(int n){
ArrayList<T> lista = new ArrayList<T>();
}

public dodajElement(){
lista.add(t);
}
9. Abs abs = new ABS(){
int f(){
return 1;
}
}
10. public interface jakisInterface{
string jakasMetodaInterface();
}

public class Test implements jakisInterface {
public String jakasMetodaInterface() {return “test”;}
}

Dzięki za pomoc! :)

0
bbxb napisał(a):

Bardzo proszę o sprawdzenie moich odpowiedzi

No i gdzie te odpowiedzi?

0

Poniżej wiersza

Moje odpowiedzi:

0

To jest test srednio-zaawansowany ? o.0

1

Racja, sory.

  1. b
  2. c
  3. x // instancje klasy zagniezdzonej maja dostep do pol klasy zewnetrznej
    ewentualnie pelna skladnia: A.this.x, czy jakos podobnie (rzadko uzywam ;d)
  4. b // bo tylko klasy pakietu P widza konstruktory klasy A bo klasa jest package-private i domyslny konstruktor rowniez
    zeby tworzyc instancje B trzeba miec instancje klasy A
    e tez od biedy (pytanie uwazam za dwuznaczne, ale znajac rozne testy i prowadzacych mysle ze chce zeby e bylo podchwytliwe i poprawna odpowiedzia, bo w statycznych metodach klasy A nie ma dostepu do this, ale mozesz zrobic po prostu new A().new B()
    co to sa 'statyczne klasy pakietu P'? nie znam takiego czegos
  5. w javie nie ma szablonow, sa generics, a to jest co innego mimo ze wyglada podobnie!
0

Mućka jesteś pewien swojej odpowiedzi na pytania 2 i 4?
A czy kod pod 8 napisałem poprawnie?

0

Kod w zad. 8 jest błędny. Powinien wyglądać tak:

class Kolekcja<T>{
		ArrayList<T> lista;
		
		Kolekcja(int n){
		lista = new ArrayList<>(n);
		}

		public void dodajElement(T t){
		lista.add(t);
		}
	}
0

W zadaniu 8 Kolekcja ma mieć w środku tablicę, a nie ArrayListę. No chyba, że treść zadań podlega dowolnej interpretacji.

0

Wątpię czy to jest zadanie z Javy. W Javie nie da się zainicjować tablicy parametrami typu, bo wewnątrz obiektu generics klasa operuje tylko na typach Object. Jedyną opcją, żeby mieć tam tablice jest przekazanie do niej referencji w konstruktorze.

0
  1. Napisz szablon klasy o nazwie Kolekcja, który przechowuje tablice obiektów nieokreślonego typu. Klasa Kolekcja ma zawierać:
    a) konstruktor przyjmujący jako argument rozmiar tabicy
    b) metodę dodajElement dodającą do tablicy jeden element typu zdefiniowanego jako parametr w szablonie

"przechowuje tablice obiektów nieokreślonego typu" => new Object[n];
"dodającą do tablicy jeden element typu zdefiniowanego jako parametr w szablonie" => void dodajElement(T element)

Tablica obiektów spełnia założenia działania, bo w Javie sparametryzować szablon można tylko czymś co dziedziczy po Object.

0
/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

class Kolekcja<T>{
        Object[] tablica;
        int size;
        int count;
 
        Kolekcja(int n){
          tablica = new Object[n];
          size = n;
          count = 0;
        }
 
        public void dodajElement(T t){
           if (count < size) 	  
             tablica[count++] = t;
           else
             throw new IllegalStateException("Przepelnienie tablicy");
        }
    }
    
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		Kolekcja<Integer> kolekcja = new Kolekcja<>(2);
		kolekcja.dodajElement(123);
		kolekcja.dodajElement(5);
	}
}

Bardziej skomplikowana wersja - raczej nie na test:
http://docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html

W (9) były dwa błędy:

  • brak średnika
  • ABS zamiast Abs
0

Ktos zapytal po co jest konstruktor ArrayList ktory bierze inta. Otoz, czasami chcemy wycisnac na maksa jesli chodzi o wydajnosc - ten konstruktor tworzy tablice ktra ma dana pojemnosc. Jesli np. wiemy ze dana tablica bedzie miala zawsze 100 elementow, i nie wiecej, to najlepiej wlasnie uzyc tego konstruktora. Domyslnie, zdaje sie ze tablica by miala wielkosc 10 czy 12, dodanie 11(13) elementu spowodowaloby czasochlonna alokacje 2 razy wiekszej tablice i przekopiowanie elementow (ok, ie jest to az takie czasochlonne, ale zbedne), po czym dodanie znowu elementu 25 czy ktoregos tam znowy by kopiowalo. Tego calego balaganu mozna uniknac jesli wiadomo jak pojemna ma byc lista.

1 użytkowników online, w tym zalogowanych: 0, gości: 1