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();
}
}
Комментарии
Отправить комментарий