Įvadas

Aptarsime klasių elementų (metodų ir laukai) matomumą ir kaip jį pritaikyti.

Naudojam įrankiai:

  • Eclipse Luna (4.4.0);
  • Java 7

Klasių elementų matomumo lygiai

Yra keturi klasių elementų matomumo lygiai. Trys iš jų turi raktinius žodžius identifikuojančius matomumo lygį, o ketvirtasis neturi - jis yra, kai nėra išreikštinai nurodytas matomumo lygmuo. Matomumo lygmenys yra šie:

  • privatus - naudojamas rezervuotas žodis private;
  • apsaugotas - naudojamas rezervuotas žodis protected;
  • paketo - neturi rezervuoto žodžio;
  • viešas - naudojamas rezervuotas žodis public.

Matomumo lygiai sąraše aukščiau pateikiami nuo labiausiai apriboto iki mažiausiai apriboto.

private matomumo lygmuo

Šaim lygmeniui priklauso labiausiai apriboto matomu elementai. Jais galima naudotis tik klasės viduje. Iš kitų klasių jie yra nepasiekiami. Bandant panaudoti private elementą iš kitos klasės kompiliatorius pateiks klaidą.

protected matomumo lygmuo

Šio matomumo lygmens elementus galės pasiekti tik pati klasė kaip private atveju ir klasės kurios paveldės iš šios klasės.

paketo matomumo lygmuo

Šio matomumo elementus galės pasiekti visos klasės kaip esančios tame pačiame pakete. Norint nurodyti paketo matomumo lygį prie klasės elemento nenurodome išreikštinai jokio matomumo lygmens.

public matomumo lygmuo

Šio matomumo lygmens elementus gali pasiekti visos sistemoje esančios klasės.

Programuojant su Java pagal inkapsuliacijos principą, dažniausiai klasių duomenys yra private matomumo, o jie pasiekiami ir modifikuojami naudojant public matomumo metodus.

Tarkime pavyzdyje iš skyrelio nurodome, kad metodas setMark yra private matomumo:

package com.zerotoherodev.tutorial.crs.model;

public class Car {
	int year;
	String mark;
	String model;
	
	public Car() {
	}
	
	public Car(int year, String mark, String model) {
		this.year = year;
		this.mark = mark;
		this.model = model;
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public String getMark() {
		return mark;
	}

	private void setMark(String mark) {
		this.mark = mark;
	}

	public String getModel() {
		return model;
	}

	public void setModel(String model) {
		this.model = model;
	}
	
	public String toString() {
		return mark + " " + model + " (" + year + ")";
	}
}

 

ir norime nurodyti automobilio markę didžiosiomis klaidosmis klasėje CarRentSystem:

package com.zerotoherodev.tutorial.crs;

import com.zerotoherodev.tutorial.crs.model.Car;

public class CarRentSystem {

	String greeting = "Hello world!";

	public String getGreeting() {
		return greeting;
	}

	public void setGreeting(String greeting) {
		this.greeting = greeting;
	}

	public static void main(String[] args) {
		Car audiCar = new Car(2014, "Audi", "A4");
		Car audiA6Car = new Car(2013, "Audi", "A6");
		
		audiCar.setMark("AUDI");
		
		System.out.println(audiCar);
		System.out.println(audiA6Car);
	}
}

Eclipse mums parodo klaidą "The method setMark(String) from the type Car is not visible", t.y. mes nematome tokio metodo. Tačiau jei atstatymume klasės Car metodo setMark matomumą į public, CarRentSystem klasė kompiliuosis ir veikia sėkmingai.

 

 

Comments powered by CComment