Loading...

Абстрактуу класстар

 

Кадимки класстардан тышкары Java абстракттуу класстарга ээ. Абстракттуу класс кадимки класска окшош. Абстракттуу класста сиз талааларды жана ыкмаларды да аныктай аласыз, бирок ошол эле учурда абстракттуу класстын объектин же мисалын түзө албайсыз. Абстракттуу класстар туунду класстар үчүн негизги функцияларды камсыз кылуу үчүн иштелип чыккан. Ал эми туунду класстар бул функцияны ишке ашырышат.

 

Абстракттуу класстарды аныктоодо абстракттуу ачкыч сөз колдонулат:

 

public abstract class Human{

 

    private String name;

    

    public String getName() { return name; }

}

Бирок негизги айырмачылык, биз анын объектисин түзүү үчүн абстракттуу класстын конструкторун колдоно албайбыз. Мисалы, төмөнкүдөй:

 

Human h = new Human();

Кадимки методдордон тышкары абстракттуу класс абстракттуу методдорду камтышы мүмкүн. Мындай ыкмалар абстракттуу ачкыч сөз менен аныкталат жана ишке ашырылбайт:

public abstract void display();

Туунду класс базалык абстракттуу класста бар бардык абстракттуу методдорду жокко чыгарышы жана ишке ашыруусу керек. Ошондой эле класста жок дегенде бир абстракттуу метод бар болсо, анда бул класс абстракттуу катары аныкталышы керектигин эске алуу керек.

 

Эмне үчүн абстракттуу класстар керек? Биз банктык операцияларды тейлөө программасын түзүп, андагы үч классты аныктап жатабыз дейли: Адамды сүрөттөгөн адам, банк кызматкерин сүрөттөгөн Кызматкер жана банктын кардарын билдирген Кардар классы. Албетте, Кызматкер жана Кардар класстары Person классынан алынат, анткени эки класс тең кээ бир жалпы талааларды жана методдорду бөлүшөт. Жана бардык объекттер кызматкерди же банктын кардарын көрсөтө тургандыктан, биз түздөн-түз Person классынан объекттерди түзбөйбүз. Андыктан аны абстракттуу кылуунун мааниси бар.

public class Program{

      

    public static void main(String[] args) {

            

        Employee sam = new Employee("Sam", "Leman Brothers");

        sam.display();

        Client bob = new Client("Bob", "Leman Brothers");

        bob.display();

    }

}

abstract class Person {

    

    private String name;

    

    public String getName() { return name; }

   

    public Person(String name){

    

        this.name=name;

    }

 

    public abstract void display();

}

 

class Employee extends Person{

 

    private String bank;

    

    public Employee(String name, String company) {

    

        super(name);

        this.bank = company;

    }

    

    public void display(){

        

        System.out.printf("Employee Name: %s \t Bank: %s \n", super.getName(), bank);

    }

}

 

class Client extends Person

{

    private String bank;

    

    public Client(String name, String company) {

    

        super(name);

        this.bank = company;

    }

    

    public void display(){

        

        System.out.printf("Client Name: %s \t Bank: %s \n", super.getName(), bank);

    }

}

Окуу китебинин дагы бир мисалы геометриялык фигуралардын системасы. Чындыгында, мындай геометриялык фигура жок. Тегерек, тик бурчтук, квадрат бар, бирок фигура жок. Бирок, тегерек менен тик бурчтуктун экөө тең жалпы нерсеге ээ жана фигуралар:

// абстрактный класс фигуры

abstract class Figure{

    

    float x; // x-координата точки

    float y; // y-координата точки

 

    Figure(float x, float y){

        

        this.x=x;

        this.y=y;

    }

    // абстрактный метод для получения периметра

    public abstract float getPerimeter();

    // абстрактный метод для получения площади

    public abstract float getArea();

}

// производный класс прямоугольника

class Rectangle extends Figure

{

    private float width;

    private float height;

 

    // конструктор с обращением к конструктору класса Figure

    Rectangle(float x, float y, float width, float height){

        

        super(x,y);

        this.width = width;

        this.height = height;

    }

    

    public float getPerimeter(){

        

        return width * 2 + height * 2;

    }

    

    public float getArea(){

        

        return width * height;

    }

}