Java pytanie rekrutacyjne: Instancja klasy abstrakcyjnej

Share on facebook
Share on twitter
Share on linkedin
PYTANIE REKRUTACYJNE (1)

Czy można stworzyć instancję klasy abstrakcyjnej?

TL;DR

Nie można utworzyć instancji klasy abstrakcyjnej.

Można to już wywnioskosować z nazwy – abstrakcyjna. Można to również bez problemu sprawdzić:

package org.blog;

public abstract class Entity {
    private Long id;

    public Entity(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }
}

Podczas próby utworzenia obiektu Entity:

package org.blog;

public class Main {

    public static void main(String[] args) {
        Entity entity = new Entity(1L);
    }
}

Otrzymamy błąd:

Error:(6, 25) java: org.blog.Entity is abstract; cannot be instantiated

Zalety

Klasy abstrakcyjne mają swoje zastosowanie pomimo tego, że w Javie zazwyczaj wykorzystujemy interfejsy do określania abstrakcji.

Wykorzystuj się je czesto do stworzenia „bazy” dla jakiegoś modelu, ponieważ większość modeli mają coś ze sobą wspólnego np. ID tak jak to widać to na przykładzie poniżej.

package org.blog;

public class User extends Entity {
    private String login;
    private String email;

    public User(Long id, String login, String email) {
        super(id);
        this.login = login;
        this.email = email;
    }

    public String getLogin() {
        return login;
    }

    public String getEmail() {
        return email;
    }
}

Choć w niektórych serwisach też one mogą się przydać:

package org.blog;

public abstract class RemoteService {
    private final String url;

    public RemoteService(String url) {
        this.url = url;
    }

    public String getUrl() {
        return getBaseUrl() + "/" + url;
    }

    private String getBaseUrl() {
        //load base url from config file
    }
}

I na bazie klasy abstrakcyjnej możemy tworzyć kolejne serwisy, gdzie wszystkie będą bazować na tym samym base url zaciąganym z pliku konfiguracyjnego.

package org.blog;

import java.util.List;

public class FacebookUserService extends RemoteService{

    public FacebookUserService(String url) {
        super(url);
    }
    
    public List<User> getUsers() {
        // get users from facebook rest api
    }
}

Cały kod można zobaczyć tutaj.

Kamil Klimek

Kamil Klimek

Pierwszy kalkulator napisany w języku Pascal w podstawówce. Później miałem trochę przygód z frontendem oraz PHP, na studiach poznałem C++ oraz Jave. Obecnie prawie 3 letnie doświadczenie jako Java full stack develop. Blog jest miejscem, dzięki któremu mogę się dzielić wiedzą i pomagać innym w nauce programowania.
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x