Sunteți pe pagina 1din 11

Clase Java, metode, specificatori de acces. Clase pt. siruri de caractere.

Java classes, methods, access specifiers. Classes for arrays of characters.

Obiective:
- implementarea claselor si a metodelor in Java
- familiarizarea cu specificatorii de acces Java
- implementarea aplicatiilor Java care lucreaza cu siruri de variabile si cu date de tip String, StringBuffer,
StringBuilder, StringTokenizer

Objectives:
- implementing Java classes and methods
- getting familiar with Java access specifiers
- implementing Java applications that work with arrays of variables and String, StringBuffer, StringBuilder,
StringTokenizer data

Clase Java
O clasă Java se declară folosind cuvântul cheie class urmat de numele clasei, recomandat a începe cu majusculă.
O clasă poate conţine variabile/atribute şi metode (implementate). Aceştia poartă numele de membri ai clasei.
Atât clasa cât şi membrii săi pot fi marcate folosind specificatorii de acces/vizibilitate.
Sintaxa:
[specificatori_de_acces] class NumeClasa{
//implementarea clasei
}
Specificatorii de acces la clase pot lipsi (se considera default – private protected, friendly accesibile in acelas pachet) sau
pot fi public, abstract sau final. Clasele interioare pot avea și alți specificatori de acces.
Notă: dacă o clasă este declarată ca fiind publică, fişierul în care este stocată si care contine metoda main( ) trebuie să
poarte acelaşi nume cu numele clasei. Dacă clasă nu este publică, nu este nici un fel de restricţie cu privire la numele
fişierului sursă.
În limbajul Java exista o serie de restricţii şi de recomandări cu privire la modul de numire a claselor.

Specificatori de acces/vizibilitate
Limbajul de programare Java prevede următorii specificatori de acces/vizibilitate, care pot fi aplicaţi (după caz) claselor
metodelor sau variabilelor.
final: poate fi aplicat claselor, metodelor şi variabilelor.
abstract: poate fi aplicat claselor şi metodelor.
static: poate fi aplicat variabilelor, metodelor şi blocurilor de cod. O variabilă statică este asociată clasei din care face
parte şi nu unei anumite instanțe. O variabilă statica poate fi accesată fie prin intermediul unui obiect (restricționat in
variantele noi Java), fie direct prin numele clasei de care aparţine. O metodă statică este de asemenea asociată clasei din
care face parte şi nu unei anumite instanțe. O metodă statică nu poate accesa alţi membri nestatici ai clasei din care face
parte. Metodele statice nu au acces la variabilă implicită this.
native: poate fi aplicat doar metodelor.
transient: se poate aplica doar variabilelor
synchronized: este folosit pentru a controla accesul mai multor fire de execuţie la resursele comune.
volatile: poate fi aplicat variabilelor şi semnifică faptul că acestea pot fi modificate în mod asincron şi de aceea
compilatorul îşi ia măsuri de precauţie speciale. Acest specificator de acces este destul de puţin folosit.
public: poate fi aplicat claselor, variabilelor şi metodelor. O clasă publică este vizibilă de oriunde din exterior (unde
este vizibil pachetul din care face parte, dacă clasa e asociată unui pachet). Un membru public (variabilă sau metoda)
poate fi accesat de oriunde din exteriorul clasei, prin intermediul instanţelor create.
protected: poate fi aplicat variabilelor sau metodelor. Membrii marcaţi astfel pot fi accesaţi de oriunde din acelaşi
pachet din care face parte clasa de care aparţin şi de oricare din subclasele (indiferent de pachetul din care fac parte)
clasei în care sunt declaraţi prin mostenire. Membrii protejaţi nu pot fi accesaţi direct din exteriorul clasei prin
intermediul instanţelor.
default: nu este un cuvânt cheie Java şi reprezintă atributul implicit care este aplicat claselor, metodelor sau
variabilelor care nu au specificat nici unul din atributele public, private sau protected. Tot ce poartă acest specificator
poate fi accesat de oriunde din pachetul din care face parte clasa sau membrii acesteia. Începând cu Java 8 poate fi
asociat unor metode din cadrul interfețelor.
private: poate fi aplicat variabilelor sau metodelor unei clase. Este cel mai restrictiv specificator de vizibilitate, iar
membrii privaţi pot fi accesaţi doar din interiorul clasei de care aparţin.

Metode (funcţii) Java


O metodă Java este o entitate software care grupează o secvenţă de declaraţii de variabile, instrucţiuni şi/sau blocuri de
program şi poate returna sau nu o variabilă de un anumit tip.
Sintaxa:
[specificatori_de_acces] tip_returnat numeMetoda (lista_de_parametri){
//implementare metoda
}
Tipul returnat poate fi void în cazul în care metoda nu returnează nimic sau orice alt tip de date (elementare sau nu), de
tip sir/tablou sau nu. În Java este permisă returnarea din funcţii a variabilelor de tip tablou datorită faptului că în acest
limbaj de programare nu există pointeri ca în C/C++, iar tablourile sunt alocate in mod dinamic indiferent unde sunt
localizate.
Numele metodei este o secvenţă alfa-numerică de caractere.
Lista de parametri este o înşiruire de tipuri şi nume de variabile, separate prin virgulă, pe care funcţia în cauză le
primeşte în momentul apelului.
Tot se mai pot defini termenii:
- metoda mutator (setter): metoda (publică, de regulă) care primeşte ca parametri nişte valori pe care le
asociază variabilelor corespondente din clasă; prototipul metodelor mutator urmează tiparul:
public void setNumeVariabila(tip_variabila noua_valoare);
E recomandat ca fiecare atribut sa aibă un setter propriu cu numele atributului si primul caracter uppercase (prefixat de
set).
- metoda accesor (getter): metoda (publică, de regulă) care returnează valoarea unor variabile din clasă;
prototipul metodelor accesor au următorul șablon de declarare:
public tip_variabila getNumeVariabila();
Se pastreaza recomandarile de la metodele setter.

Metodele constructor
Există o categorie aparte de metode membre ale unei clase, şi anume metodele constructor. Acestea sunt analoage cu
cele din C++.
In Java nu există destructori. Există însă un mecanism complementar care permite executarea unei secvențe de cod în
momentul distrugerii unui obiect. Acest mecanism se bazează pe metoda
public void finalize()
care este prezentă implicit în fiecare clasă Java fiind definită în clasa Object și moștenită implicit. Suprascrierea acestei
metode ține loc de destructor si se apeleaza prin: System.gc(); si daca nu se doreste asteptarea threadu-lui specific de
stergere se poate apela System.runFinalization(); pentru a se executa imediat.

Metoda main( )
Prototipuri posibile:
public static void main(String[] args){
//implementarea metodei main
}
SAU
public static void main(String... args){
//implementarea metodei main
}
Metode statice
• O metodă statică nu poate accesa alţi membri nestatici ai clasei din care face parte
• Metodele statice nu au acces la variabilă implicită this

Clase interioare
Java permite definirea unor clase în cadrul altor clase. Astfel de clase sunt numite clase interioare.
O clasă interioară este membră a clasei în care a fost declarată.
Sintaxa:
class ClasaExterioara{
//...
[static] [specificator_de_vizibilitate] class ClasaInterioara{
//...
}
}

Ca membră în clasa din care face parte, o clasă interioară are acces la toţi membrii clasei care o încapsulează, indiferent
de specificatorul de acces (public, protected, private).
O clasă interioară poate fi marcată cu oricare din specificatorii de vizibilitate public, protected sau private.
O instanţă a unei clase interioare este asociată întotdeauna cu o instanţă a clasei încapsulatoare şi are acces direct la
membrii acesteia. Pentru a instanția o clasă interioară se foloseşte o sintaxă similară cu cea prezentată mai jos.
Sintaxa:
ClasaExterioara obiect_exterior = new ClasaExterioara();
ClasaExeterioara.ClasaInterioara obiect_interior = obiect_exterior.new
ClasaInterioara();

Clasele interioare pot fi marcate şi cu specificatorul de acces static. O clasă interioară static a are acces doar
membrii statici din clasa încapsulatoare. O clasă interioară statică este asociată cu însăşi clasa încapsulatoare şi nu cu o
anumită instanţă a acesteia şi de aceea modalitatea de a accesa membrii acesteia ia în considerare numele ambelor clase:
Sintaxa:
ClasaExterioara.ClasaInterioara.metoda();

Instanțierea claselor interioare statice foloseşte o sintaxă similară cu cea de mai jos:
Sintaxa:
ClasaExterioara.ClasaInterioara obiect_interior = new
ClasaExterioara.ClasaInterioara();

Clase abstracte
O clasă Java trebuie marcată cu cuvântul cheie abstract dacă are cel puţin o metodă abstractă (fără implementare, în
corpul clasei apare doar declararea metodei).
Sintaxa:
abstract class NumeClasa{
public abstract void metodaAbstracta();
public void metodaNormala(){
//implementarea metodei
}
}

Clasele abstracte nu pot fi instanțiate. Clasele abstracte pot fi doar moştenite. Dacă clasă care moşteneşte o clasă
abstractă nu implementează toate metodele abstracte moştenite, devine la rândul ei clasa abstractă.

Clasa String
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html

=> permite tratarea unitara a şirurilor de caractere; toate variabilele literale Java care conţin o secvenţă de caractere pot
fi prelucrate prin intermediul acestei clase.

Exemplu:
//declararea şi iniţializarea unei variabile de tip String
String sir = new String(”abc”);
! Variabilele de tip String nu pot fi modificate odată ce au fost iniţializate.

Clasa String are constructori care permit:


 iniţializarea unui obiect de tip String cu un şir vid de caractere
 iniţializarea unui obiect de tip String cu un şir de caractere primit ca parametru
 iniţializarea unui obiect de tip String cu un şir de bytes primit ca parametru
 iniţializarea unui obiect de tip String cu un alt obiect de tip String primit ca parametru
 iniţializarea unui obiect de tip String cu un alt obiect de tip StringBuffer primit ca parametru

Clasa String include metode pentru:


 examinarea individuală a fiecărui caracter din secvenţa stocată
 compararea a doua variabile de tip String
 căutarea unei anumite porţiuni dintr-un String
 extragerea unei anumite porţiuni dintr-un String
 crearea unei copii a unei variabile de tip String, cu sau fără transformarea caracterelor din majuscule în minuscule
 determinarea lungimii şirului de caractere conţinut de un obiect de tip String
 etc.

Clasa StringBuffer
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuffer.html

=> permite, ca şi clasa String tratarea unitară a şirurilor de caractere; toate variabilele literale Java care conţin o secvenţă
de caractere pot fi prelucrate prin intermediul acestei clase.

Exemplu:
//declararea şi iniţializarea unei variabile de tip StringBuffer
StringBuffer sb = new StringBuffer(”abc”);

! Spre deosebire de o variabilă de tip String, un obiect de tip StringBuffer poate fi modificat pe parcursul existenţei sale.

Clasa StringBuffer are constructori care permit:


 iniţializarea unui obiect de tip StringBuffer cu un şir vid de caractere
 iniţializarea unui obiect de tip StringBuffer cu un şir vid de caractere de o anumită lungime
 iniţializarea unui obiect de tip StringBuffer cu un alt obiect de tip String primit ca parametru

Clasa StringBuffer include metode pentru:


 examinarea individuală a fiecărui caracter din secvenţa stocată
 compararea a doua variabile de tip StringBuffer
 căutarea unei anumite porţiuni dintr-un StringBuffer
 extragerea unei anumite porţiuni dintr-un StringBuffer
 crearea unei copii a unei variabile de tip StringBufer, cu sau fără transformarea caracterelor din majuscule în minuscule
 modificarea unui obiect de tip StringBuffer prin inserarea (la o anumită poziţie sau la sfârşit) oricăror tipuri de date Java
 modificarea unui obiect de tip StringBuffer prin alterarea oricărei părţi a conţinutului său
 determinarea lungimii şirului de caractere conţinut de un obiect de tip StringBuffer

Clasa StringBuilder
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuilder.html

=> se doreşte a fi un înlocuitor al clasei StringBuffer. Mecanismele, funcţionalităţile şi metodele pe care le oferă sunt foarte
asemănătoare cu cele ale clasei mai sus amintite.

Clasa StringTokenizer
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/StringTokenizer.html

=> permite separarea unui obiect de tip String în subsecţiuni (porțiuni), pe baza unor anumiţi separatori. Un obiect de
acest tip nu face distincţia între tipurile datelor care sunt incluse în String şi le tratează pe toate la nivel de caracter sau şir
de caractere.

Clasa StringTokenizer are constructori care permit:


 iniţializarea unui obiect de tip StringTokenizer cu un alt obiect de tip String primit ca parametru
 iniţializarea unui obiect de tip StringTokenizer cu un alte 2 obiecte de tip String (care reprezintă conţinutul variabilei şi şirul
de caractere considerat drept separator) primite ca parametru

Clasa StringTokenizer include metode pentru:


 determinarea numărului de porţiuni obţinute după secţionarea potrivit separatorilor declaraţi
 parcurgerea iterativă a întregii secvențe de secțiuni
 extragerea porţiunii curente
 determinarea existenţei sau inexistenței de porţiuni adiţionale
 etc.

Java 11 a adus mai multe imbunatatiri claselor specific sirurilor de caractere. In clasa String avem :
isBlank(): Această metodă returnează true dacă șirul este gol sau conține numai white spaces
lines(): Această metodă returnează un flux de linii extrase din șir, separate de terminatoare de linii, cum ar fi \ n, \ r , etc.
strip(), stripLeading(), stripTrailing(): Aceste metode sunt folosite pentru a elimina spațiile albe din șir. După cum
sugerează și numele, strip() va elimina spațiile albe de inceput și de sfârșit, stripLeading () va elimina numai spațiile albe
de inceput, iar stripTrailing () va elimina numai spațiile albe finale.
repeat (int n): Această metodă returnează un șir nou a cărui valoare este concatenarea acestui șir repetat de 'n' ori.

Construiti o aplicatie Java care sa testeze aceste noi metode.

Activitate suplimentară: folosiți noile facilități oferite de clasele pt. șiruri de caractere, corelate cu utilizarea expresiilor
regulare (regex, http://www.regexr.com,
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.html)
Exemple

Ex. 1: Metode in clase Java


public class Methods_01 {
void m1(int... sir){
for(int crt_val : sir){
System.out.print(crt_val+" ");
}
System.out.println();
}
void m2(int sir[]){
for(int i=0; i<sir.length; i++){
System.out.print(sir[i]+" ");
}
System.out.println();
}
void m3(int sir[]){
sir[0] = -777;
}
int[] m4(){
int sir[] = {8, 88, 888};
return sir;
}
/*
void m5(int x=7){ // nu exista
System.out.println(x);
}
*/
static void m6(){
System.out.println("Metoda statica recomandat a fi apelata fara
obiect");
}
}

class Test{
public static void main(String... args) {
int sir[] = {5, 3, 777};
Methods_01 ob1 = new Methods_01();

ob1.m1(sir); //parametru de tip tablou


ob1.m1(10); //o sg. variabila
ob1.m1(100, 101, 102); //variabile enumerate
ob1.m1(); //nici un parametru
ob1.m2(sir);
ob1.m3(sir);
ob1.m2(sir); //-777, 3, 777
sir = ob1.m4(); //8, 88, 888
ob1.m1(sir);
Methods_01.m6();
}
}
Ex. 2: clase interioare in metode Java
public class InnerClass_01 {
static int i1 = 1;
int i2 = 2;
void m1(){
int i3 = 3;
class Inner1{
public void m1Inner(){
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
}
}
Inner1 ob1 = new Inner1();
ob1.m1Inner();
}
class Inner2{
public void m2Inner(){
System.out.println(i1);
System.out.println(i2);
}
}
}
class Test{
public static void main(String... args) {
InnerClass_01 ob1 = new InnerClass_01();
ob1.m1();
//InnerClass_01.Inner1 ob2 = new InnerClass_01().new Inner1();
//invizibila in ext.
//ob2.m1Inner();
InnerClass_01.Inner2 ob3 = new InnerClass_01().new Inner2();
ob3.m2Inner();
}
}
Ex. 3: Utilizare clasa StringTokenizer
import java.util.StringTokenizer;
class StringTokenizer_01 {
public static void main(String[] args) {
String tags = "pizza pepperoni food cheese";
// convert each tag to a token
StringTokenizer st = new StringTokenizer(tags," ");
while ( st.hasMoreTokens() ){
String token = (String)st.nextToken();
System.out.println(token);
}
}
}
Ex. 4: Utilizare clasa StringBuffer
import java.lang.*;
public class Test{
public static void main(String[] args) {
System.out.println("Test StringBuffer!");
StringBuffer sb = new StringBuffer(0);
//inserarea la prima pozitie
System.out.println(sb.insert(0, "început"));
//determinarea lungimii
int len = sb.length();
//inserarea la sfarsit
System.out.println(sb.insert(len, "sfarsit"));
//inserarea la o pozitie intermediara a unei instante anonime Integer
System.out.println(sb.insert(7, String.valueOf(777)));
//inserarea la sfarsit a unei variabile de tipul elementar int
System.out.println(sb.append(888));
}
}
Lucru individual

1. Scrieți o clasă Java care modelează o matrice de valori întregi. Atât dimensiunile matricii cât și tabloul bidimensional
de elemente sunt atribute private în clasă, accesate prin intermediul unor metode publice setter getter. Includeți în clasă
metode de afișare a matricii, de calcul și retur a numărului de grupuri de elemente (9 valori învecinate) care nu diferă cu
mai mult de 5% față de un anumit prag.

2. Scrieți o clasă Java numită Persoană cu atributele private: nume (String), latitudine și longitudine (float). Clasa conține
un constructor explicit fără parametri care inițializează numele cu null și latitudinea și longitudinea cu 0. Metoda
finalize() va fi implementată pentru a afișa un mesaj la distrugerea obiectelor. Atributele clasei se pot modifica prin
metodele mutator specifice setNume(), setLatitudine() și setLongitudine(). Atributele vor fi returnate prin metode
mutator specifice. Instanțiați n obiecte, citiți și setati valorile atributelor, apoi afișați datele tuturor obiectelor.

3. Scrieți o aplicație care definește o clasă denumită Copil . Definiți metodele și variabilele membre ale acestei clase
pentru următoarele acțiuni/caracteristici.
- numele copilului
- data nașterii
- copilul știe să se prezinte: ”Salut, numele meu este ...”
- copilul știe să spună câti ani are
- copilul știe să adune două numere mai mici decât 10 și să returneze rezultatul sub forma: ”Suma lui X și Y este Z”
- copilul poate să spună alfabetul în forma directă, cât și inversă
- copilul știe să spună “La revedere”
- copilul știe să coloreze o tablă de șah de dimensiune dată folosind culori alternative (pentru culori folosiți simbolurile 1
și 0)
- copilul știe să joace X-0 singur 😊 (!!! Folosiți aplicația realizată în tema anterioară)

Precizări: numele copilului și data sa de naștere nu pot fi accesate din afara clasei.

Toate informațiile despre un Copil vor fi completate cu ajutorul unui obiect de tip Copil, prin intermediul variabilelor și a
metodelor corespunzătoare acestui obiect. Interacțiunea cu un copil se va face tot prin intermediul unui obiect
instanțiat în main.

4. Definiți un șir unidimensional de valori de tip char, având numărul mai mic sau cel mult egal cu un n citit de la
tastatură. Fiecare valoare conține valori alfa-numerice generate aleator. Transformați șirul de caractere într-un obiect
de tip String. Afișați valoarea inițială și apoi valoarea obținută prin înlocuirea fiecărui caracter numeric cu ‘*’.

5. Scrieți o aplicație Java care definește o cheie de autentificare de tipul: XXXXX-XXXXX-XXXXX-XXXXX, unde X reprezintă
un caracter ce poate fi cifră sau literă. Scrieți un program care verifică dacă această cheie are exact 4 grupuri de
caractere a câte 5 caractere fiecare și separate prin caracterul ‘-‘. De asemenea, calculați numărul de cifre și litere din
cheia de autentificare. Numărul de cifre trebuie să fie mai mare decât numărul de litere, iar numărul de litere nu poate
să fie 0.
În cazul în care nu este îndeplinită cel puțin o condiție din cele menționate anterior, afișați mesajul: ”Cheie de
autentificare incorectă!”

6. Să se definească o clasa numita Student cu atributele private nume, nr. tel si media (constructori, setter-i, getter-i).
În metoda main (inclusă într-o altă clasă) se crează un tablou unidimensional de obiecte de tip Student, cu lungimea
specificată de catre utilizator. Citirea datelor fiecărui student se face în formatul nume^^^nr_tel^^^media. Dacă
informația specifică numarului de tel. nu este validă (10 caractere numerice, cu sau fară caractere speciale de tip spațiu,
- sau .), se cere reintroducerea întregului șir de caractere.
Să se ordoneze și să se afișeze studenții după nume și după medie.

7. Să se implementeze o clasă numită Cerc cu atributele private culoare (int), raza (float), pozitie in plan (2 coordonate
intregi). Se definesc constructorii și metodele mutator și accesor specifice. Valoarea culorii este împărțită în 4 octeți
reprezentând transparența, apoi cantitatile de R, G si B.
În metoda main (inclusă într-o altă clasă) se citesc de la tastatură datele aferente unui șir de n obiecte de tip Cerc.
Să se implementeze metodele care primesc ca parametru șirul de obiecte și afișează:
- datele cercurilor a căror centru este inclus într-unul din cele 4 cadrane
- datele cercurilor care sunt incluse în întregime într-unul din cele 4 cadrane
- datele cercurilor care au centrele pe aceeași dreaptă orizontală sau verticală
- datele cercurilor care au cantitatea de R, G sau B într-un anumit interval specificat

Individual work

1. Write a Java class that models a matrix of integer values. The dimensions and the array of elements are private
attributes and are controlled using appropriate setter-getter methods. Write the methods for displaying the matrix, for
determining and returning the number of 9 adjacent elements cells that don’t differ with more than 5% from a threshold
value.

2. Develop a Java program which defines a class named Person that contains as private attributes: name (String),
latitude and longitude (float). The class contains an explicit constructor without parameters that will initialize the
latitude and longitude with 0 and the string with null. A finalize() method will be used as a destructor from
C++ and will display a message. The mutator methods, setName(), setLongitude() and setLatitude() will be defined
to modify the attributes of the class. Define appropriate accesor methods. Instantiate n objects, read the
corresponding data from the keyboard and display the information related to all the objects.

3. Write an application which defines a class named Child. Define the methods and member variables for this class
which enble a Child object to store/do the following:
- the name of the child
- the child’s birthday
- the child can introduce him/herself by „saying”: Hello my name is ...
- the child can tell his/her age
- the child can add two numbers smaller than 10 and return the result like so: The sum of X and Y is equal to Z
- the child knows how to say Goodbye!
- the child can speak the alphabet both in direct and inverse order
- the child can color a chess board given its dimensions by using alternative colors (for the colors use the symbols 1 and
0)
- the child can play dots and crosses (X-0) by him/herself 😊 (use the application developed in the previous homework)

Remarks: the child’s name and birthday cannot be accessed from outside the class.
All the information about a Child will be filled-in using a Child object and its associated methods and variables. The
interaction with teh child will be done through an object which is instantiated in the main method.

4. Define a one-dimensional array of char type, less than a value n introduced from the keyboard. Each value contains
some randomly generated alpha-numerical characters. Generate a String object using the array. Display the initial
content of the array and after that, process all the elements so that all numbers will be replaced with ‘*’. Display the
result.

5. Write a Java application which defines an authentication key with the format: XXXXX-XXXXX-XXXXX-XXXXX, where X is
a character which can be either a digit or a letter. The application should verify if this key has exactly 4 groups of
characters with 5 characters each, and separated by the symbol ‘-‘. Also, compute the number of digits and letters from
the authentication key. The number of digits should be greater than the number of letters, and the number of letters
cannot be 0.
If any of the above conditions are not met, display the message: “Invalid authentication key!”

6. Define a class named Student that has as private attributes the name, tel. number and average mark (constructors,
setters, getters).
In the main method create an uni-dimensional array of Student objects with the dimension specified by the user. The
data corresponding to each object is read from the keyboard, respecting the format name^^^tel. number^^^average
mark. If the data specific to the telephone number is not valid (10 numeric characters, with or without special characters
like blank, - or .), the user is asked to re-enter the entire array of characters. Display the students ordered by name and
by average mark.

7. Implement a class named Circle with the private attributes color (int), radius (float), planar position (2 integer). Define
the specific constructors and setter getter methods. The color is divided in 4 bytes, each of them representing the
transparency and the quantities of R, G and B.
In the main method (included in another class), read from the keyboard the data for n Circle objects.
Implement the methods that receive as parameter the array of objects and display:
- the circles whose center is included in one of the 4 quadrants
- the circles that are included entirely in one of the 4 quadrants
- the circles that have the centers on the same horizontal or vertical line
- the circles that have the R, G or B quantities in a certain specified interval

S-ar putea să vă placă și