SE_21_Lesson_10: Encapsulation, Inheritance

-> Encapsulation:

Problem1:

package org.example;

public class Rectangle {
public double width;
public double length;
}
package org.example;

public class Main {
public static void main(String[] args) throws Exception {
Rectangle r1 = new Rectangle();
r1.length = 5;
r1.width = 3;

Rectangle r2 = new Rectangle();
r2.length = 7;
r2.width = 2;
}

} 

Buradaki problem ondan ibaretdir ki, Rectangle klasinin icindeki field adi deyishilse butun yaratdigimiz obyektlerde de deyishiklikler aparmaliyiq.

Solution:

package org.example;

public class Rectangle {
private double width;
private double length;

public double getWidth() {
return width;
}

public void setWidth(double width) {
this.width = width;
}

public double getLength() {
return length;
}

public void setLength(double length) {
this.length = length;
}
}
package org.example;

public class Main {
public static void main(String[] args) throws Exception {
Rectangle r1 = new Rectangle();
r1.setLength(5);
r1.setWidth(3);

Rectangle r2 = new Rectangle();
r2.setLength(7);
r2.setWidth(2);
}
}

Adi deyishse bele biz sadece klasin icinde bir nece yerde deyishiklikler aparacayiq.


Problem 2:

package org.example;

public class Main {
public static void main(String[] args) throws Exception {
Rectangle r1 = new Rectangle();
r1.length = -5;
r1.width = 3;
}
}

Burada biz menfi deyer menimsetdik, bu ise yol verilmezdir.

Solution:

package org.example.Lesson10;

public class Rectangle {
private double width;
private double length;

public double getWidth() {
return width;
}

public void setWidth(double width) {
if (width < 0) {
throw new RuntimeException("Menfi deyer olmaz");
}
this.width = width;
}

public double getLength() {
return this.length;
}

public void setLength(double length) {
if (length < 0) {
throw new RuntimeException("Menfi deyer olmaz");
}
this.length = length;
}
}


-> Inheritance:

package org.example;

public class Person {
public String name;
public String surname;
}
package org.example;

public class Student {
public String name;
public String surname;
}
package org.example;

public class Teacher {
public String name;
public String surname;
}

Burada gorduyumuz kimi kod tekrarlanir. 

package org.example;

public class Person {
public String name;
public String surname;
}
package org.example;

public class Student extends Person{
public String studentCard;
}
package org.example;

public class Teacher extends Person{
public String jobTitle;
}

Burada Student is a Person ve Teacher is a Person. Buna Is a relationship deyilir.

Has a relationship ise obyekti ozunde saxladiqda deyilir.



-> Super class-da constructor ishletdikde lakin child class-da ishletmedikde ne olur?

package org.example;

public class Person {
public String name;
public String surname;

public Person(String name, String surname) {
this.name = name;
this.surname = surname;
}
}

Sebeb ondadir ki, child klaslarin konstructorlarinin birinci setrinde default shekilde super() keyword var. Yeni extend elediyim klasin parametrsiz constructor-unu cagir, lakin super klasda parametrsiz constructor olmadigi ucun xeta aliriq.



-> this ve super keywordlerini bir arada ishletmek

package org.example;

public class Student extends Person{
public String studentCard;

public Student(String name, String surname, String studentCard) {
this(name, surname);
this.studentCard = studentCard;
}

public Student(String name, String surname) {
super(name, surname);
}
}


-> Super class yaranmamish Subclass-daki fieldlari ishlede bilmerik eks halda xeta aliraq

package org.example;

public class Teacher extends Person{
public String jobTitle;

public Teacher(String name, String surname) {
super(name, surname);
}

public Teacher() {
super(jobTitle);
}
}


-> Hem base hem subclass-da eyni signature-i metodlar olduqda, super keywordunu metodda ishletmek

package org.example;

public class Person {
public String name;
public String surname;

public Person(String name, String surname) {
this.name = name;
this.surname = surname;
}

public void foo() {
System.out.println("foo in Person");
}
}

package az.main;

public class Student extends Person {

public String studentCard;

public Student(String name, String surname, String studentCard) {
super(name, surname);
this.studentCard = studentCard;
}

public void foo() {
System.out.println("foo in Student");
}

public void foo2() {
super.foo();
System.out.println("foo2 in Student");
}

}



-> Super classdaki metodu subclassda this keywordu ile cagirmaq. (Bu zaman hidden shekilde sanki subclass-da olur)

package org.example.lesson_13;

public class A {
public void methodInA() {
System.out.println("You called methodInA in class A");
}
}


package org.example.lesson_13;

public class B extends A{
public void foo() {
this.methodInA();
}
}


Комментарии

Популярные сообщения из этого блога

IoC:ApplicationContext, BeanFactory. Bean

Lesson1: JDK, JVM, JRE

Lesson_2: Operations in Java