You are on page 1of 6

‫ﻳﻌﻨﻰ ﺍﻳﻪ ‪ OOP‬ﻭ ‪ Class‬ﻭ ‪ Object‬ﻭ ‪Constructor‬‬

‫ﺍﻻﻭﺑﺠﻴﻜﺖ ﺍﻭﺭﻳﺎﻧﺘﻴﺪ ﻫﻮ ﻓﻜﺮﺓ ﺍﻥ ﻛﻞ ﺣﺎﺟﺔ ﺗﺒﻘﻰ ﺍﻭﺑﺠﻴﻜﺖ ﺍﻗﺪﺭ ﺍﺳﺘﻌﻤﻠﻪ ﺑﻌﺪ ﻛﺪﻩ ﻑ ﺍﺑﻠﻴﻜﺎﺷﻦ ﺗﺎﻧﻰ ﺑﺪﻝ ﻣﺎ ﻛﺎﻥ ﺍﻟﻤﻮﺿﻮﻉ ﻋﺒﺎﺭﺓ ﻋﻦ‬
‫ﺳﺘﺮﺍﻛﺘﺸﺮ ﺑﺮﻭﺟﺮﺍﻣﻨﺞ ‪ .‬ﺍﻟﻔﺎﻧﻜﺸﻦ ﺗﺘﻜﺘﺐ ﻣﺮﺓ ﻭﺍﺣﺪﻩ ﺑﺘﻌﻤﻞ ﺣﺎﺟﺔ ﻣﻌﻴﻨﺔ ﻭ ﺥﻻﺹ ﺧﻠﺼﻨﺎﻋﻠﻰ ﻛﺪﻩ‪ .‬ﻑ ﺍﻻﻭﺑﺠﻴﻜﺖ ﺍﻭﺭﻳﺎﻧﺘﺪ ﺑﻨﻘﺴﻢ ﺍﻟﻤﺸﻜﻠﺔ‬
‫ﻛﻠﻬﺎ ﺍﻭ ﺍﻻﺑﻠﻴﻜﺎﺷﻦ ﺍﻟﻠﻰ ﻋﺎﻳﺰ ﺍﻋﻤﻠﻪ ﻛﻠﻪ ﻻﺟﺰﺍء ﺍﺻﻐﺮ ﻛﻞ ﺷﻮﻳﺔ ﺩﺍﺗﺎ ﻣﺮﺗﺒﻄﻴﻦ ﺑﺒﻌﺾ ﺍﺣﻄﻬﻢ ﻓﻰ ﻣﻮﺩﻳﻮﻝ ﻓﻴﻪ ﺍﻟﺪﺍﺗﺎ ﻭ ﺍﻟﻤﻴﺜﻮﺩﺯ ﺍﻟﻠﻰ ﻟﻴﻬﺎ‬
‫ﻉﻻﻗﺔ ﺑﻨﻔﺲ ﺍﻟﺤﺎﺟﺔ ﺍﻟﻤﻮﺩﻳﻮﻝ ﺩﻩ ﻫﻮ ﺍﻟﻠﻰ ﺑﻴﻘﻮﻟﻮﺍ ﻋﻠﻴﻪ ﺍﻟﻚﻻﺱ ‪ Class‬ﻣﺜﺎﻝ ﻟﻮ ﺍﻧﺎ ﺑﻌﻤﻞ ﺍﺑﻠﻴﻜﺎﺷﻦ ﺣﻀﻮﺭ ﻭ ﺍﻧﺼﺮﺍﻑ ﻫﻰ ﺩﻯ ﺍﻟﻤﺸﻜﻠﺔ‬
‫ﻫﻘﺴﻤﻬﺎ ﻣﻮﺩﻳﻮﻟﺰ ﺍﻭ ﻙﻻﺳﺰ ﻳﺒﻘﻰ ﻋﻨﺪﻯ ﻣﺚﻻ ﻙﻻﺱ ﻟﻠﻤﻮﻇﻔﻴﻦ ﻭ ﻙﻻﺱ ﻟﻠﺸﻴﻔﺘﺎﺕ ﻟﻮ ﺍﺧﺪﻧﺎ ﻙﻻﺱ ﺍﻟﻤﻮﻇﻔﻴﻦ ﻧﺤﻂ ﻓﻴﻬﺎ ﺩﺍﺗﺎ ﺍﺳﻢ ﺍﻟﻤﻮﻇﻒ‬
‫ﻭ ﺭﻗﻤﻪ ﺍﻟﺘﺄﻣﻴﻨﻰ ﻭ ﻋﻨﻮﺍﻧﻪ ﻭ ﺍﻯ ﺣﺎﺟﺔ ﺗﺎﻧﻴﺔ ﻭ ﻧﺤﻂ ﻓﻴﻬﺎ ﻣﻴﺜﻮﺩﺯ ﺑﺘﻌﻤﻞ ﺍﻯ ﺣﺎﺟﺔ ﺑﺘﻄﺒﻊ ﻫﺎﻟﻮ ﻣﺚﻻ ﻭ ﻣﻴﺜﻮﺩ ﺗﺎﻧﻴﺔ ﺑﺘﻌﻤﻞ ﺍﻯ ﺣﺎﺟﺔ ﻣﺶ ﻣﻬﻢ‬
‫ﻳﺒﻘﻰ ﻛﺪﻩ ﺑﻘﻰ ﻋﻨﺪﻯ ﻙﻻﺱ ﻓﻴﻬﺎ ﺩﺍﺗﺎ ﻭ ﻣﻴﺜﻮﺩﺯ ﻑ ﻛﻞ ﻣﺮﺓ ﻫﻜﺮﻳﻴﺖ ﻣﻮﻇﻒ ﺟﺪﻳﺪ ﻭ ﺍﺑﺪﺃ ﺍﺣﻄﻠﻪ ﺑﻘﻰ ﺍﺳﻤﻪ ﻭ ﺭﻗﻢ ﺍﻟﺘﺄﻣﻴﻨﻰ ﻭ ﺑﺎﻗﻰ ﺍﻟﺪﺍﺗﺎ‬
‫ﺑﺘﺎﻋﺘﻪ ﺑﻘﻰ ﺍﻧﺎ ﻛﺪﻩ ﻋﻨﺪﻯ ﺍﻭﺑﻜﻴﺠﺖ ﻣﻦ ﺍﻟﻚﻻﺱ ‪.‬‬

‫ﻟﻮ ﻫﻨﺒﺼﻠﻬﺎ ﺑﻜﻮﺩ‬

‫​ ‪class‬‬
‫{ ‪Employee‬‬
‫​‪int‬‬
‫;‪socialSecurityNumber‬‬
‫​ ‪String‬‬
‫;‪name‬‬
‫​ ‪String‬‬
‫;‪email‬‬
‫​ ‪public‬‬
‫{)(‪void printHello‬‬
‫​‪System.‬‬ ‫​‪out‬‬
‫​“(‪.println‬‬
‫​‪Hello‬‬
‫;)”‬
‫}‬
‫}‬

‫ﺩﻯ ﺍﻟﻚﻻﺱ ‪ .‬ﻧﺮﻭﺡ ﻟﻠـ‪ main method‬ﻭ ﻧﻌﻤﻞ ﺍﻭﺑﺠﻴﻜﺖ ﻳﻌﻨﻰ ﻧﻜﺮﻳﻴﺖ ﻣﻮﻇﻒ ﺑﺎﻟﻜﻮﺩ ﺷﻜﻠﻬﺎ ﻛﺪﻩ‬

‫​‬
‫​‪public‬‬ ‫​ ‪void‬‬
‫​‬
‫​‪static‬‬ ‫​ ‪String‬‬
‫​(‪main‬‬ ‫{)][‪args‬‬
‫​ = ‪Employee mohamed‬‬ ‫​ ‪new‬‬ ‫;)(‪Employee‬‬
‫​‪mohamed.‬‬ ‫​ ‪socialSecurityNumer‬‬ ‫​=‬
‫​‪1‬‬
‫;‬
‫​‪mohamed.‬‬ ‫​‪name‬‬ ‫​“ =‬‫​‪Mohamed‬‬ ‫;”‬
‫​‪mohamed.‬‬ ‫​ ‪email‬‬
‫​“ =‬
‫​‪mohamed@gmail.com‬‬ ‫;”‬
‫}‬

‫ﻛﺪﻩ ﺑﻘﻰ ﻋﻨﺪﻯ ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ ﻙﻻﺱ ﺍﻭ ﺑﻤﻌﻨﻰ ﺍﺑﺴﻂ ﺑﻘﻰ ﻋﻨﺪﻯ ﻣﻮﻇﻒ ﺍﺳﻤﻪ ﻣﺤﻤﺪ …‬

‫____________________________________________________________________________‬

‫؟ ﻗﺎﻟﻚ ﻟﻤﺎ ﺗﻴﺠﻰ ﺗﻜﺮﻳﻴﺖ ﺍﻭﺑﺠﻴﻜﺖ ﺯﻯ ﻣﺎ ﺷﻮﻓﺖ ﺑﺘﺴﺘﺨﺪﻡ ﻛﻠﻤﺔ ‪new‬‬


‫​ ‪ .‬ﻣﻊ ﻛﻞ ﻣﺮﺓ ﺑﺘﻜﺮﺭﻳﺖ‬ ‫ﻃﻴﺐ ﺍﻳﻪ ﺍﻟﻜﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ ﺩﻩ‬
‫‪ Create‬ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ ﺍﻟﻚﻻﺱ ﺍﻧﺖ ﺗﻘﺪﺭ ﺗﻌﻤﻞ ﺣﺎﺟﺔ ‪ .‬ﻳﻌﻨﻰ ﺍﻳﻪ ؟ ﻳﻌﻨﻰ ﺗﺨﻴﻞ ﻣﺚﻻ ﺍﻧﻚ ﻓﻰ ﻛﻞ ﻣﺮﺓ ﻋﺎﻳﺰ ﺗﻜﺮﺭﻳﺖ ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ‬
‫ﻙﻻﺱ ﺍﻟﻤﻮﻇﻔﻴﻦ ﺩﻯ ﻋﺎﻳﺰ ﺗﻄﺒﻊ ﻛﻠﻤﺔ ﻣﺮﺣﺒﺎ ﺑﻚ ﺍﻳﻬﺎ ﺍﻟﻤﻮﻇﻒ ﺍﻟﺠﺪﻳﺪ ﻣﺚﻻ ‪/:‬‬
‫ﻳﺒﻘﻰ ﺗﺤﻂ ﺟﻤﻠﺔ ﺍﻟﻄﺒﺎﻋﺔ ﺩﻯ ﺟﻮﺍ ﺍﻟﻜﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ ﻛﺪﻩ ﻛﻞ ﻣﺮﺓ ﻫﺘﻘﻮﻝ ‪ new‬ﻭ ﺗﻌﻤﻞ ﺍﻭﺑﺠﻴﻜﺖ ﻫﻮ ﻣﻨﻪ ﻟﻨﻔﺴﻪ ﻫﻴﺮﻭﺡ ﻳﻨﻔﺬ ﺍﻟﻜﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ‬
‫ﺩﻩ ‪.‬‬
‫ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﺸﺎﺋﻊ ﺑﻘﻰ ﻟﻠﻜﻨﻮﺳﺘﺮﺍﻛﺘﻮﺭ ﺍﻳﻪ ﺍﻧﻰ ﺍﺣﻂ ‪ initial values‬ﻟﻠﺪﺍﺗﺎ ﺍﻟﻠﻰ ﺟﻮﺍ ﺍﻟﻚﻻﺱ ﺑﻤﻌﻨﻰ ﺍﻧﺎ ﻟﻤﺎ ﻋﻤﻠﺖ ﺍﻭﺑﺠﻴﻜﺖ ﻣﺤﻤﺪ ﻛﺎﻥ‬
‫ﻣﺤﺘﺎﺝ ﻣﻨﻰ ﺍﻧﻰ ﺍﻋﻤﻞ ‪ mohamed.name =mohamed‬ﻭﺍﺑﻌﺖ ﺍﻟﺮﻗﻢ ﺍﻟﺘﺄﻣﻴﻨﻰ ﻭ ﺍﻟﻤﻴﻞ ﺑﻨﻔﺲ ﺍﻟﻄﺮﻳﻘﺔ ﻋﺸﺎﻥ ﻳﺤﻂ ﺍﻟﻘﻴﻢ ﺩﻯ ﻑ‬
‫ﺍﻻﻭﺑﺠﻴﻜﺖ ‪ .‬ﺍﻓﺮﺽ ﺑﻘﻰ ﺍﻧﺎ ﻣﺶ ﻋﺎﻳﺰ ﺍﺑﻌﺖ ﺍﻟﻘﻴﻢ ﺩﻯ ﻋﺎﻳﺰ ﻳﺒﻘﻰ ﻓﻴﻪ ‪ default values‬ﺗﺘﺤﻂ ﻟﻮ ﺍﻧﺎ ﻣﺒﻌﺘﺶ ﻗﻴﻴﻢ ﻳﻜﺮﻳﻴﺖ ﺑﻴﻬﺎ ﺍﻻﻭﺑﺠﻴﻜﺖ‬

‫____________________________________________________________________________‬
‫‪Prepared By‬‬

‫‪Mohamed Ramadan | Open Source | Intake #35‬‬ ‫​‬


‫‪Java Developer at‬‬
‫‪ .‬ﺍﻋﻤﻠﻬﺎ ﺍﺯﺍﻯ !!‬
‫ﺟﻮﺍ ﺍﻟﻚﻻﺱ ﻣﻴﻨﻔﻌﺶ ﺍﻋﻤﻞ ‪ assign‬ﻟﻘﻴﻢ ﻟﻠﺪﺍﺗﺎ ﺑﺘﺎﻋﺘﻰ ﺍﻟﻚﻻﺱ ﺩﻯ ﺣﺎﺟﺔ ﻛﺪﻩ ﺯﻯ ﻣﺎ ﺑﻴﻘﻮﻟﻮﺍ ‪ blue print‬ﻳﺎﺩﻭﺏ ﺍﺣﻂ ﻓﻴﻬﺎ ﺍﻟﺪﺍﺗﺎ ﻭ‬
‫​ ←​ﺩﻩ ﻏﻠﻂ‬
‫​ﻣﻴﻨﻔﻌﺶ ﻫﻴﺮﻣﻰ ﺍﻳﺮﻭﺭ‪.‬‬ ‫ﺍﻟﻤﻴﺜﻮﺩ ﺑﺲ ﻣﻴﻨﻔﻌﺶ ﺍﻗﻮﻝ ‪int age =20‬‬
‫ﺍﻟﻤﻔﺮﻭﺽ ﺍﻗﻮﻝ ‪ int age‬ﺑﺲ ﻭ ﺍﻝ ‪ 20‬ﺩﻯ ﺍﺣﻄﻬﺎ ﻭ ﺍﻧﺎ ﺑﻜﺮﻳﻴﺖ ﺍﻻﻭﺑﺠﻴﻜﺖ ﻓﻰ ﺍﻟـ‪ main‬ﺯﻯ ﻣﺎ ﻋﻤﻠﻨﺎ‪.‬‬

‫ﺍﻟﻤﻬﻢ ﻧﺮﺟﻊ ﻟﻤﻮﺿﻮﻋﻨﺎ ﺍﻟﻜﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ ﺩﻩ ﺑﻴﺒﻘﻰ ﺷﻜﻠﻪ ﻣﻴﺜﻮﺩ ﺯﻯ ﺍﻯ ﻣﻴﺜﻮﺩ ﺑﺲ ﻭﺍﺧﺪﺓ ﻧﻔﺲ ﺍﺳﻢ ﺍﻟﻚﻻﺱ‬
‫ﻃﺐ ﻳﻨﻔﻊ ﺍﻟﻚﻻﺱ ﺍﻟﻮﺍﺣﺪﺓ ﻳﺒﻘﻰ ﻓﻴﻬﺎ ﺍﻛﺘﺮ ﻣﻦ ﻛﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ ؟ ﺍﻩ ﻳﻨﻔﻊ ﻣﺶ ﺍﻧﺖ ﻋﻨﺪﻙ ﺣﺎﺟﺔ ﺍﺳﻤﻬﺎ ‪ overloading‬ﻳﺒﻘﻰ ﻳﻨﻔﻊ ﻃﺐ ﺍﻳﻪ‬
‫ﺍﻻﻭﻓﺮ ﻟﻮﺩﻧﺞ ﺍﺑﻘﻰ ﺑﺺ ﻋﻠﻴﻪ ﺗﺤﺖ ﻓﻰ ﺍﻟﺴﺆﺍﻝ ﺑﺘﺎﻋﻪ ‪..‬‬
‫ﺍﻧﺎ ﺩﻟﻮﻗﺘﻰ ﻋﺎﻳﺰ ﻟﻤﺎ ﺍﻛﺮﻳﻴﺖ ﺍﻭﺑﺠﻴﻜﺖ ﻳﺮﻭﺡ ﻳﺤﻄﻠﻰ ﻓﻴﻪ ﺩﺍﺗﺎ ﺑﺎﻟﻜﻮﺩ ﺍﻋﻤﻞ ﺍﻳﻪ ‪ .‬ﻫﻨﻜﻤﻞ ﻋﻠﻰ ﺍﻟﻚﻻﺱ ﺍﻟﻠﻰ ﻓﻮﻕ‬

‫​ ‪class‬‬
‫{ ‪Employee‬‬
‫​ ‪int‬‬
‫;‪socialSecurityNumber‬‬
‫​ ‪String‬‬
‫;‪name‬‬
‫​ ‪String‬‬
‫;‪email‬‬
‫{)(‪Employee‬‬ ‫​‬ ‫​←‬
‫‪// ​ the constructor‬‬
‫​ = ‪socialSecurityNumber‬‬
‫​‪1‬‬
‫;‬
‫​“ = ‪name‬‬‫​‪Ahmed‬‬‫;”‬
‫​“ = ‪email‬‬
‫​‪me@example.com‬‬ ‫;”‬
‫}‬
‫​ ‪public‬‬
‫​ ‪void‬‬
‫​(‪createNewEmployee‬‬ ‫​ ‪int‬‬
‫​ ‪SSN,‬‬
‫​ ‪String‬‬ ‫​ ‪​tring‬‬
‫‪empName, S‬‬ ‫{)‪mail‬‬
‫;‪socialSecurityNumber = SSN‬‬
‫;‪name = empName‬‬
‫;‪email = mail‬‬
‫}‬
‫}‬

‫____________________________‬

‫ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻻﺳﺎﺳﻴﺔ ﻟﻠـ ‪OOP‬‬


‫ﻓﻴﻪ ‪ 3‬ﻣﻔﺎﻫﻴﻢ ﺍﺳﺎﺳﻴﺔ ﻗﺎﻡ ﻋﻠﻴﻬﺎ ﺍﻻﻭﺑﺠﻴﻜﺖ ﺍﻭﺭﻳﺎﻧﺘﻴﺪ ﻫﻢ ‪ inheritance‬ﻭ ‪ encapsulation‬ﻭ ‪polymorphism‬‬
‫ﻭ ﻓﻴﻪ ﻣﻔﻬﻮﻡ ﺭﺍﺑﻊ ﻣﻤﻜﻦ ﻧﺪﺧﻠﻪ ﻫﻮ ﻛﻤﺎﻥ ﻣﻊ ﺍﻟﺖﻻﺗﺔ ﺍﻧﻪ ﻗﺎﺋﻢ ﻋﻠﻴﻪ ﺍﻻﻭﺑﺠﻴﻜﺖ ﺍﻭﺭﻳﺎﻧﺘﻴﺪ ﻭ ﻫﻮ ﺍﻝ ‪abstraction‬‬

‫____________________________________________________________________________‬
‫‪Prepared By‬‬

‫‪Mohamed Ramadan | Open Source | Intake #35‬‬ ‫​‬


‫‪Java Developer at‬‬
‫ﻧﻤﺴﻜﻬﻢ ﻭﺍﺣﺪﺓ ﻭﺍﺣﺪﺓ …‬

‫ﺍﻟـ‪Inheritance‬‬
‫ﻓﻜﺮﺓ ﺍﻻﻧﻬﺮﻳﺘﺎﻧﺲ ﺯﻯ ﻣﺎ ﻗﻮﻟﻨﺎ ﺍﻥ ﺍﻻﻭﺑﺠﻴﻜﺖ ﺍﻭﺭﻳﺎﻧﺘﻴﺪ ﺍﺗﻌﻤﻞ ﻋﺸﺎﻥ ﺍﻟـ‪ reusability‬ﻭ ﺍﻗﺪﺭ ﺍﺳﺘﻌﻤﻞ ﺍﻟﺤﺎﺟﺔ ﺍﻛﺘﺮ ﻣﻦ ﻣﺮﺓ ﻑ ﺍﻛﺘﺮ ﻣﻦ‬
‫ﻣﻜﺎﻥ ‪ .‬ﻃﻴﺐ ﻋﻠﻰ ﺍﻟﻤﺜﺎﻝ ﺍﻟﻠﻰ ﻓﻮﻕ ﻟﻮ ﺍﻧﺎ ﻋﺎﻳﺰ ﺍﻋﻤﻞ ﻙﻻﺱ ﻣﻮﻇﻔﻴﻦ ﻣﻜﺎﺗﺐ ﻭ ﻙﻻﺱ ﻋﻤﺎﻝ ﺍﻧﺘﺎﺝ ﻛﻞ ﻙﻻﺱ ﻓﻴﻬﻢ ﻟﻴﻬﺎ ﺍﻟﺪﺍﺗﺎ ﺑﺘﺎﻋﺘﻬﺎ ﻭ ﻟﻴﻬﺎ‬
‫ﺍﻟﻤﻴﺜﻮﺩ ﺑﺘﺎﻋﺘﻬﺎ ) ﺑﺎﻟﻤﻨﺎﺳﺒﺔ ﺍﻟﻤﻴﺜﻮﺩ ﺳﺎﻋﺎﺕ ﺑﻴﺘﻘﺎﻝ ﻋﻠﻴﻬﺎ ﺑﻴﻬﺎﻓﻴﻮﺭ ‪ behavior‬ﻋﻠﻰ ﺍﺳﺎﺱ ﺍﻧﻬﺎ ﺑﺘﻌﻤﻞ ﺣﺎﺟﺔ ﺑﺘﻄﺒﻊ ﺑﺘﻜﺮﻳﻴﺖ ﻭ ﻫﻜﺬﺍ ﻓﻴﺒﻘﻰ‬
‫ﺍﻟﻚﻻﺱ ﻟﻴﻬﺎ ﺩﺍﺗﺎ ﻭ ﺑﻴﻬﺎﻓﻴﻮﺭ ( ﺍﻟﻤﻬﻢ ﻧﻜﻤﻞ ‪ .‬ﺩﻟﻮﻗﺘﻰ ﺍﻟﻚﻻﺳﺰ ﺍﻻﺗﻨﻴﻦ ﺩﻭﻝ ﻛﻞ ﻭﺍﺣﺪﻩ ﻣﺨﺘﻠﻔﺔ ﻋﻦ ﺍﻟﺘﺎﻧﻴﺔ ﻓﻰ ﺍﻟﺪﺍﺗﺎ ﻭ ﺍﻟﺒﻴﻬﺎﻓﻴﻮﺭ ﺍﻟﺨﺎﺻﺔ ﺑﻴﻬﺎ‬
‫ﺑﺲ ﻫﻢ ﺍﻻﺗﻨﻴﻦ ﻫﻴﺒﻘﻰ ﻓﻴﻬﻢ ﺍﻟﺪﺍﺗﺎ ﻭ ﺍﻟﺒﻴﻬﺎﻓﻴﻮﺭ ﺑﺘﺎﻋﻪ ‪ class employee‬ﻷﻥ ﺍﻟﻤﻮﻇﻒ ﺳﻮﺍء ﻛﺎﻥ ﻋﺎﻣﻞ ﺍﻧﺘﺎﺝ ﺍﻭ ﻣﻮﻇﻒ ﻋﻠﻰ ﻣﻜﺘﺐ ﻻﺯﻡ‬
‫ﻳﻜﻮﻥ ﻋﻨﺪﻩ ﺭﻗﻢ ﺗﺄﻣﻴﻨﻰ ﻭ ﺍﺳﻢ ﻭ ﺍﻳﻤﻴﻞ ﻃﺐ ﻣﻌﻨﻰ ﻛﺪﻩ ﺍﻧﻰ ﻫﻜﺘﺐ ﺍﻟﺪﺍﻧﺎ ﺩﻯ ﻣﺮﺗﻴﻦ ﻳﻌﻨﻰ ﻣﺮﺓ ﻓﻰ ﻙﻻﺱ ﻋﻤﺎﻝ ﺍﻻﻧﺘﺎﺝ ﻭ ﻣﺮﺓ ﺗﺎﻧﻴﺔ ﻑ‬
‫ﻙﻻﺱ ﻣﻮﻇﻔﻴﻦ ﺍﻟﻤﻜﺎﺗﺐ ﻳﺒﻘﻰ ﺍﻧﺎ ﻛﺪﻩ ﻣﻌﻤﻠﺘﺶ ﺍﻭﺑﺠﻴﻜﺖ ﺍﻭﺭﻳﺎﻧﺘﻴﺪ ‪ .‬ﻃﺐ ﺍﻳﻪ ﺍﻟﺤﻞ ؟ ﻗﺎﻟﻚ ﺍﻧﺖ ﺗﺠﻴﺐ ﺍﻟﺪﺍﺗﺎ ﺍﻟﻠﻰ ﻣﺸﺘﺮﻛﺔ ﺑﻴﻨﻬﻢ ﻭ ﺗﺤﻄﻬﺎ ﻓﻰ‬
‫ﻙﻻﺱ ﻛﺒﻴﺮﺓ ﺗﺒﻘﻰ ‪ parent‬ﻟﻴﻬﻢ ﻫﻢ ﺍﻻﺗﻨﻴﻦ ﻭ ﻫﻢ ﺍﻻﺗﻨﻴﻦ ﻳﻮﺭﺛﻮﺍ ﻣﻦ ﺍﻟﻚﻻﺱ ﺩﻯ ﺍﻟﺪﺍﺗﺎ ﻭ ﺍﻟﺒﻴﻬﺎﻓﻴﻮﺭ ﺑﺘﻮﻋﻬﺎ ﻭ ﻳﺒﻘﻰ ﻫﻢ ﻛﻞ ﺍﻟﻠﻰ ﻓﻴﻬﻢ ﺍﻟﺪﺍﺗﺎ‬
‫ﻭ ﺍﻟﺒﻴﻬﺎﻓﻴﻮﺭ ﺍﻟﻠﻰ ﺧﺎﺹ ﺑﻴﻬﻢ ﻫﻢ ﺑﺲ ‪ .‬ﻳﻌﻨﻰ ﺑﻔﺮﺽ ﺍﻥ ﻋﺎﻣﻞ ﺍﻻﻧﺘﺎﺝ ﻫﻴﺒﻘﻰ ﻋﻨﺪﻩ ﺩﺍﺗﺎ ﺯﻳﺎﺩﻩ ﻋﻦ ﺍﻟﻠﻰ ﻣﻮﺟﻮﺩﻩ ﻓﻰ ‪class employee‬‬
‫ﺭﻗﻢ ﺍﻟﻤﻜﻨﺔ ﺍﻟﻠﻰ ﺷﻐﺎﻝ ﻋﻠﻴﻬﺎ ﻭ ﻣﻮﻇﻒ ﺍﻟﻤﻜﺘﺐ ﻫﻴﺒﻘﻰ ﻋﻨﺪﻩ ﺭﻗﻢ ﺍﻟﻤﻜﺘﺐ ﺍﻟﻠﻰ ﻗﺎﻋﺪ ﻋﻠﻴﻪ ﻫﻴﺒﻘﻰ ﺷﻜﻠﻬﺎ ﻛﺪﻩ ﻑ ﺍﻟﻜﻮﺩ‬

‫​‪c‬‬‫​ ‪lass DeskEmployee‬‬


‫​ ‪extends‬‬
‫{‪Employee‬‬ ‫​‬
‫ﺩﻯ ﻫﻰ ﺍﻟﻠﻰ ﻣﻌﻨﺎﻫﺎ ﺑﺘﻮﺭﺙ ﻣﻦ ﻙﻻﺱ ‪// extends‬‬
‫​ ‪int‬‬
‫;‪deskNumber‬‬
‫}‬

‫​ ‪class‬‬ ‫​ ‪ProductionEmployee‬‬ ‫​ ‪extends‬‬


‫{‪Employee‬‬
‫​ ‪int‬‬
‫;‪machineNumber‬‬
‫}‬
‫ﻛﺪﻩ ﻟﻮ ﺭﻭﺣﺖ ﻑ ﺍﻟـ‪ main method‬ﻭ ﺣﺒﻴﺖ ﺍﻛﺮﻳﻴﺖ ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ ﺍﻯ ﻙﻻﺱ ﻓﻴﻬﻢ ﻣﺚﻻ ‪ DeskEmployee‬ﻫﻴﺒﻘﻰ ﺷﺎﻳﻒ ﻛﻞ ﺍﻟﻠﻰ‬
‫ﻣﻮﺟﻮﺩ ﻓﻰ ﻙﻻﺱ ‪ + Employee‬ﻛﻞ ﺍﻟﻠﻰ ﻣﻮﺟﻮﺩ ﻓﻰ ﻙﻻﺱ ‪DeskEmployee‬‬

‫ﺍﻟـ‪Encapsulation‬‬
‫ﺍﺣﻨﺎ ﻣﺘﻔﻘﻴﻦ ﻣﻦ ﻓﻮﻕ ﺍﻥ ﺍﻟﻚﻻﺱ ﺑﻴﺒﻘﻰ ﻓﻴﻬﺎ ﺩﺍﺗﺎ ‪ Data‬ﻭ ﺑﻴﻬﺎﻓﻴﻮﺭ ‪ Behavior‬ﺍﻧﺎ ﺑﺎﻟﻨﺴﺒﺎﻟﻰ ﺍﻟﺪﺍﺗﺎ ﺩﻯ ﻣﻬﻤﺔ ﺍﻭﻯ ﻣﻴﻨﻔﻌﺶ ﺍﻯ ﺣﺪ ﻳﺨﺶ‬
‫ﻋﻠﻴﻬﺎ ﺯﻯ ﻣﺎ ﺣﺼﻞ ﻓﻮﻕ ﻭ ﻋﻤﻠﻨﺎ ‪ mohamed.name‬ﻣﻴﻨﻔﻌﺶ ﻛﺪﻩ ﺍﺧﺶ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ﻋﻠﻰ ﺍﻟﺪﺍﺗﺎ ‪ name‬ﻓﺎﻧﺎ ﺍﻋﻤﻞ ﺍﻳﻪ ﺍﺧﻠﻰ ﺍﻟﺪﺍﺗﺎ‬
‫ﻛﻠﻬﺎ ‪ private‬ﻣﻴﻨﻔﻌﺶ ﺍﺧﺶ ﻋﻠﻴﻬﺎ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ‪ ,‬ﻭ ﺍﻋﻤﻞ ﺍﻧﺎ ﻣﻴﺜﻮﺩ ‪ public‬ﺍﺳﻤﻬﻢ ‪ setters‬ﻭ ‪ getters‬ﺍﺟﻴﺐ ﻭ ﺍﺣﻂ ﺑﻴﻬﻢ ﺍﻟﺪﺍﺗﺎ ﺩﻯ‬
‫‪ .‬ﻣﻌﻨﻰ ﻛﺪﻩ ﺍﻥ ﺍﻯ ﻙﻻﺱ ﻫﺘﺘﻌﻤﻞ ﻫﻴﺒﻘﻰ ﻣﺤﺘﻮﺍﻫﺎ ‪ Data‬ﻭ ‪ Behavior‬ﻭ ‪ setters&getters‬ﻟﻠﺪﺍﺗﺎ ﺑﺘﺎﻋﺘﻰ ‪.‬‬
‫ﻧﺸﻮﻑ ﺑﺎﻟﻜﻮﺩ ﺷﻜﻠﻬﺎ‪:‬‬

‫____________________________________________________________________________‬
‫‪Prepared By‬‬

‫‪Mohamed Ramadan | Open Source | Intake #35‬‬ ‫​‬


‫‪Java Developer at‬‬
class ​
Employee{
private int ​
SSN;
private String ​name;
private String ​email;
// setters to set value to the data
public void ​setSSN(​ int ​
socialNumber){
SSN = socialNumber;
}
public ​setName(​ String ​empName){
name = empName;
}
public ​ String ​
setMail(​ mail){
email = mail;
}
// getters to get or return the data values
public int ​
getSSN(){
return​SSN;
}
public String ​getName(){
return ​
name;
}
public String ​getMail(){
return ​
email;
}
}

‫ ﺍﻟﻠﻰ ﺍﻧﺎ ﻋﻤﻠﺘﻬﻢ ﺩﻭﻝ ﻋﺸﺎﻥ ﺍﺣﻂ ﺍﻭ ﺍﺟﻴﺐ ﺍﻯ ﻗﻴﻤﺔ‬getters ‫ ﻭ‬setters ‫ ﻻﺯﻡ ﺍﺳﺘﻌﻤﻞ ﺍﻟﻤﻴﺜﻮﺩ‬main method‫ﻭ ﻛﺪﻩ ﻟﻤﺎ ﺍﺭﻭﺡ ﺍﻟـ‬
‫ﻟﻠﺪﺍﺗﺎ ﺍﻟﻠﻰ ﻓﻮﻕ ﻣﺶ ﻫﻌﺮﻑ ﺍﻋﻤﻞ‬
name ​
object.​ = “​ahmed​ ”; /​ // ← this is wrong
object.​
setName(​ “​
ahmed​ ”); ​/// ← this is valid
Polymorphism‫ﺍﻟـ‬
: ‫ﻣﻌﻨﺎﻫﺎ ﺑﺎﻟﺒﻠﺪﻯ ﺍﺧﻠﻰ ﺍﻟﻤﻴﺜﻮﺩ ﻳﺒﻘﺎﻟﻬﺎ ﺍﻛﺘﺮ ﻣﻦ ﺷﻜﻞ ﺃﻭ ﺍﺧﻠﻰ ﻧﻔﺲ ﺍﻟﻤﻴﺜﻮﺩ ﺗﻌﻤﻞ ﺍﻛﺘﺮ ﻣﻦ ﺣﺎﺟﺔ ﻭ ﺩﻩ ﺑﻴﺤﺼﻞ ﻋﻦ ﻃﺮﻳﻖ ﺣﺎﺟﺘﻴﻦ‬

: overloading‫ﺍﻟـ‬
‫ﺍﻟﻤﻴﺜﻮﺩ ﺍﻟﻠﻰ ﺑﻜﺘﺒﻬﺎ ﺑﻴﺒﻘﻰ ﻟﻴﻬﺎ ﺟﺰﺃﻳﻦ ﺍﻟﺠﺰﺃ ﺍﻟﻠﻰ ﺑﻴﺒﻘﻰ ﻓﻴﻪ ﺍﺳﻤﻬﺎ ﻭ ﺍﻟﺒﺎﺭﺍﻣﺘﺮﺯ ﺍﻟﻠﻰ ﺑﺘﺎﺧﺪﻫﺎ ﺩﻩ ﺍﺳﻤﻪ‬
Signnature‫​ﺍﻟـ‬
public void ​ int ​
printData(​ data)
{ } ‫​ ﺍﻟﻠﻰ ﺑﻴﺘﻨﻔﺬ ﻭ ﺑﻴﺘﻜﺘﺐ ﺑﻴﻦ ﺍﻟﻘﻮﺳﻴﻦ‬
body‫ﻭ ﺍﻟﺠﺰء ﺍﻟﺘﺎﻧﻰ ﺍﻟـ‬

____________________________________________________________________________
Prepared By

Mohamed Ramadan | Open Source | Intake #35 ​


Java Developer at
‫​‪{ System.‬‬
‫​‪out.‬‬
‫} ;)‪println(data‬‬

‫ﻓﻰ ﺍﻟـ ‪ overloading‬ﻗﺎﻟﻚ ﺍﻥ ﻣﻤﻜﻦ ‪ two functions‬ﻳﺎﺧﺪﻭﺍ ﻧﻔﺲ ﺍﻻﺳﻢ ﺑﺸﺮﻁ ﺍﻧﻚ ﺗﻐﻴﻴﺮ ﺍﻟﺪﺍﺗﺎ ﺗﺎﻳﺒﺲ ﺑﺘﺎﻋﻪ ﺍﻟﺒﺎﺭﺍﻣﻴﺘﺮﺯ ﺍﻟﻠﻰ‬
‫ﺩﺍﺥﻻﻟﻬﺎ ﻣﺚﻻ ﺑﺪﻝ ‪ int data‬ﺗﺒﻘﻰ ‪ double data‬ﺍﻭ ﺗﻐﻴﺮ ﻓﻰ ﻋﺪﺩﻫﻢ ﻳﻌﻨﻰ ﻳﺒﻘﻰ‬
‫​( ‪printData‬‬‫​ ‪int‬‬
‫​ ‪data,‬‬ ‫​ ‪double‬‬ ‫)‪anotherData‬‬

‫ﻭ ﻓﻰ ﺍﻟﺤﺎﻟﺔ ﺩﻯ ﻟﻤﺎ ﺍﺟﻰ ﺍﻧﺎﺩﻯ ﻋﻠﻰ ﺍﻟﻤﻴﺜﻮﺩ ﻋﺸﺎﻥ ﺍﻧﻔﺬﻫﺎ ﻫﻴﺸﻮﻑ ﺍﻧﺎ ﻫﻨﺎﺩﻯ ﻋﻠﻰ ﺍﻧﻬﻮ ‪ signature‬ﻭ ﻳﻨﻔﺬ ﺍﻟـ‪ body‬ﺑﺘﺎﻋﻪ‬
‫ﻣﺜﺎﻝ ﺑﺎﻟﻜﻮﺩ‬

‫​ ‪void‬‬‫{)(‪print‬‬
‫​‪System.‬‬ ‫​‪out‬‬
‫​“(‪.println‬‬‫​‪inside empty print‬‬ ‫;)”‬
‫}‬
‫​ ‪void‬‬ ‫​ ‪int‬‬
‫​( ‪print‬‬ ‫{)‪data‬‬
‫​‪system.‬‬ ‫​‪out.‬‬ ‫​ ‪inside print int‬‬
‫​“(‪println‬‬ ‫;)”‬
‫}‬
‫​‪v‬‬‫​ ‪oid‬‬ ‫​ ‪double‬‬
‫​( ‪print‬‬ ‫{)‪data‬‬
‫​‪system.‬‬ ‫​‪out.‬‬‫​“(‪println‬‬
‫​‪inside print double‬‬ ‫;)”‬
‫}‬
‫​ ‪void‬‬ ‫​ ‪int‬‬
‫​( ‪print‬‬ ‫​ ‪data,‬‬
‫​ ‪double‬‬ ‫{)‪anotherData‬‬
‫​‪System.‬‬ ‫​‪out.‬‬
‫​“(‪println‬‬‫​‪inside data and another data‬‬
‫;)”‬
‫}‬

‫ﻟﻤﺎ ﺍﺟﻰ ﺍﻧﺎﺩﻯ ﻋﻠﻰ ﺍﻟﻤﺒﻴﺜﻮﺩ ﺍﻟﻠﻰ ﺍﺳﻤﻬﺎ ‪ print‬ﻫﺘﻄﺒﻊ ﺍﻧﻬﻮ ﺳﻄﺮ ﺑﻨﺎءﺍ ﻋﻠﻰ ﺍﻧﺎ ﻫﻨﺎﺩﻯ ﻋﻠﻴﻬﺎ ﺍﺯﺍﻯ‬

‫;)(‪print‬‬ ‫‪// inside empty print‬‬


‫​‪5‬‬
‫​(‪print‬‬ ‫;)‬ ‫‪// inside print int‬‬
‫​(‪print‬‬
‫​‪16.124‬‬ ‫;)‬ ‫‪// inside print double‬‬
‫​(‪print‬‬
‫​‪5,16.124‬‬ ‫;)‬ ‫‪// inside print data and another data‬‬
‫ﺑﺎﻟﺮﺟﻮﻉ ﻟﻠﻜﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ ﻣﺶ ﺍﻟﻜﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﻴﺜﻮﺩ ﻭﺍﺧﺪﺓ ﻧﻔﺲ ﺍﺳﻢ ﺍﻟﻚﻻﺱ ﻳﻌﻨﻰ ﻛﺪﻩ ﺍﻧﺎ ﻣﻤﻜﻦ ﻳﺒﻘﻰ ﻋﻨﺪﻯ ﺍﻛﺘﺮ ﻣﻦ ﻣﻴﺜﻮﺩ‬
‫ﻭﺍﺧﺪﺓ ﺍﺳﻢ ﺍﻟﻚﻻﺱ ﻭ ﻧﻐﻴﺮ ﺍﻟﺒﺎﺭﺍﻣﻴﺘﺮﺯ ﺍﻟﻠﻰ ﺟﻮﺍﻫﺎ ﻋﺪﺩﻫﻢ ﺍﻭ ﺍﻟﺪﺍﺗﺎ ﺗﺎﻳﺐ ﺑﺘﺎﻋﻬﻢ ﻭ ﻳﺒﻘﻰ ﻛﺪﻩ ﻋﻨﺪﻯ ﺍﻛﺘﺮ ﻣﻦ ﻛﻮﻧﺴﺘﺮﺍﻛﺘﻮﺭ ‪.‬‬
‫ﺍﻟـ‪: overriding‬‬
‫ﻫﻨﺎ ﺑﻘﻰ ﺍﻧﺎ ﺑﺜﺒﺖ ﻧﻔﺲ ﺍﻟـ‪ signature‬ﻛﻠﻪ ﺍﻻﺳﻢ ﻭ ﺍﻟﺒﺎﺭﺍﻣﻴﺘﺰ ﻭ ﺑﻐﻴﻴﺮ ﺍﻟـ‪ body‬ﺑﺲ ﺩﻩ ﻃﺒﻌﺎ ﻣﺶ ﻫﻴﺒﻘﻰ ﻓﻰ ﻧﻔﺲ ﺍﻟﻚﻻﺱ ﻋﺸﺎﻥ ﻟﻮ ﻧﻔﺲ‬
‫ﺍﻟﺴﻴﺠﻨﺘﺸﺮ ﺑﺎﻟﻜﺎﻣﻞ ﻫﻴﺮﻣﻰ ﺍﻳﺮﻭﺭ ﻫﻴﻘﻮﻟﻚ ﺩﻯ ﻣﻮﺟﻮﺩﻩ ﺍﺹﻻ‬
‫ﻃﺐ ﺍﺳﺘﺨﺪﻣﻬﺎ ﺍﺯﺍﻯ ﺍﺣﻂ ﺍﻟﻤﻴﺜﻮﺩ ﺍﻻﺻﻠﻴﺔ ﻓﻰ ﻙﻻﺱ ﻭ ﺑﻌﺪﻳﻦ ﺍﻋﻤﻞ ﻙﻻﺱ ﺑﺘﺄﻧﻬﺮﺕ ﺍﻟﻚﻻﺱ ﺩﻯ ﻭ ﺍﺣﻂ ﺍﻟﺴﻴﺠﻨﺘﺸﺮ ﺑﺘﺎﻉ ﺍﻟﻤﻴﺜﻮﺩ ﻓﻰ‬
‫ﺍﻟﻚﻻﺱ ﺍﻟﺘﺸﺎﻳﻠﺪ ﻭ ﺍﻏﻴﺮ ﺍﻟـ‪body‬‬
‫ﺍﻟﻤﺜﺎﻝ ﺑﺎﻟﻜﻮﺩ‬

‫​ ‪class‬‬
‫{‪Parent‬‬
‫​ ‪void‬‬ ‫​ ‪int‬‬
‫​( ‪print‬‬ ‫{)‪data‬‬
‫​‪System.‬‬ ‫​‪out.‬‬
‫​“(‪println‬‬
‫​‪inside the parent class‬‬
‫;)”‬
‫}‬
‫}‬
‫____________________________________________________________________________‬
‫‪Prepared By‬‬

‫‪Mohamed Ramadan | Open Source | Intake #35‬‬ ‫​‬


‫‪Java Developer at‬‬
‫​ ‪calss‬‬‫​ ‪Child‬‬‫​ ‪extends‬‬ ‫{‪Parent‬‬
‫​ ‪void‬‬ ‫​ ‪int‬‬
‫​( ‪print‬‬ ‫{)‪data‬‬
‫​‪System.‬‬ ‫​‪out.‬‬
‫​“(‪println‬‬‫​‪inside child class‬‬ ‫‪”):‬‬
‫}‬
‫}‬
‫ﻛﺪﻩ ﻟﻤﺎ ﺍﺟﻰ ﺍﻋﻤﻞ ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ ‪ child‬ﻭ ﺍﻧﺎﺩﻯ ﻋﻠﻰ ‪ print‬ﻫﻴﻄﺒﻊ ‪ inside child‬ﻟﻮ ﻋﻤﻠﺖ ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ ‪ parent‬ﻭ ﻧﺎﺩﻳﺖ ﻋﻠﻰ‬
‫‪ print‬ﻫﻴﻄﺒﻊ ‪ inside parent‬ﻃﺐ ﻟﻮ ﻣﻌﻤﻠﻨﺎﺵ ﺍﻟﻮﻓﺮ ﻟﻮﺩﻧﺞ ﺩﻩ ﻳﻌﻨﻰ ﻣﻜﺘﺒﻨﺎﺵ ﺍﻟﻤﻴﺜﻮﺩ ‪ print‬ﺗﺎﻧﻰ ﺟﻮﺍ ﺍﻝ‪ child‬ﻓﻰ ﺍﻟﺤﺎﻟﺔ ﺩﻯ ﺳﻮﺍء‬
‫ﻋﻤﻠﺖ ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ ‪ parent‬ﺍﻭ ﻣﻦ ‪ child‬ﻓﻰ ﺍﻟﺤﺎﻟﺘﻴﻦ ﻫﻴﻄﺒﻊ ‪inside parent‬‬

‫___________________________________________________________________________‬
‫ﺍﻟـ‪Abstraction‬‬
‫ﺩﻩ ﻣﻌﻨﺎﻩ ﺍﻥ ﻳﺒﻘﻰ ﻋﻨﺪﻯ ﻙﻻﺱ ﻣﻘﻔﻮﻟﻪ ﻣﺤﺪﺵ ﻳﻘﺪﺭ ﻳﻌﻤﻞ ﻣﻨﻬﺎ ﺍﻭﺑﺠﻴﻜﺖ ﻭ ﺩﻩ ‪ more encapsulation‬ﻳﺒﻘﻰ ﻋﻨﺪﻯ ﻙﻻﺱ ﻓﻴﻬﺎ ﺩﺍﺗﺎ ﻭ‬
‫ﺑﻴﻬﺎﻓﻴﻮﺭ ﻣﻴﻘﻔﻮﻟﻴﻦ ﻣﺤﺪﺵ ﻳﻘﺪﺭ ﻳﻌﻤﻞ ﺍﻭﺑﺠﻴﻜﺖ ﻳﺴﺘﺨﺪﻡ ﺑﻴﻪ ﺍﻟﺪﺍﺗﺎ ﻭ ﺍﻟﺒﻴﻬﺎﻓﻴﻮﺭ ﺩﻭﻝ ﺍﻭﻣﺎﻝ ﻳﺒﻘﻰ ﺍﻳﻪ ﺍﻟﺤﻞ ؟ ﻳﺒﻘﻰ ﺍﻟﺤﻞ ﺍﻧﻰ ﺍﻋﻤﻞ ﻙﻻﺱ‬
‫ﺗﺄﻧﻬﺮﺕ ﺍﻟﺪﺍﺗﺎ ﻭ ﺍﻟﺒﻴﻬﺎﻓﻴﻮﺭ ﺩﻭﻝ ﻭ ﺗﺒﻘﻰ ﻛﺪﻩ ﺍﺧﺪﺗﻬﻢ ﻭ ﺍﻋﻤﻞ ﺑﻘﻰ ﺍﻭﺑﺠﻴﻜﺖ ﻣﻦ ﺍﻟﻚﻻﺱ ﺍﻟﺠﺪﻳﺪﺓ ﺩﻯ ﺍﺧﺶ ﺑﻴﻬﺎ ﻋﻠﻰ ﺍﻟﺪﺍﺗﺎ ﺑﺘﺎﻋﺘﻬﺎ ﻭ ﺑﺘﺎﻋﻪ‬
‫ﺍﻟﻚﻻﺱ ﺍﻻﺑﺴﺘﺮﺍﻛﺖ ﺩﻯ‬

‫ﻓﻴﻪ ﺣﺎﺟﺔ ﺍﺳﻤﻬﺎ ‪ Interface‬ﺑﺘﻌﻤﻞ ﻧﻔﺲ ﺍﻟﻚﻻﻡ ﺩﻩ ﺑﺎﻟﻈﺒﻂ ‪ .‬ﻃﺐ ﺍﻳﻪ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻻﻧﺘﺮﻓﻴﺲ ﻭ ﺍﻻﺑﺴﺘﺮﺍﻛﺖ ﻙﻻﺱ ؟ ﻃﺎﻟﻤﺎ ﺍﻻﺗﻨﻴﻦ ﺑﻴﻌﻤﻠﻮﺍ‬
‫ﻧﻔﺲ ﺍﻟﺤﺎﺟﺔ ؟ !‬

‫ﺍﻟﻚﻻﺱ ﺍﻻﺑﺴﺘﺮﺍﻛﺖ ﺣﻠﻬﺎ ﺍﻧﻰ ﺍﻋﻤﻞ ﺍﻧﻬﺮﺕ ﻟﻴﻬﺎ ‪ .‬ﺍﻻﻧﺘﺮﻓﻴﺲ ﺣﻠﻪ ﺍﻧﻰ ﺍﻋﻤﻠﻪ ﺣﺎﺟﺔ ﺷﺒﻪ ﺍﻻﻧﻬﺮﺕ ﻛﺪﻩ ﺍﺳﻤﻬﺎ ‪ implement‬ﺯﻳﻬﺎ ﺑﺎﻟﻈﺒﻂ ‪.‬‬
‫ﺍﻟﻔﺮﻕ ﺑﻘﻰ ﺍﻧﻰ ﻣﻘﺪﺭﺵ ﺍﻋﻤﻞ ﺍﻧﻬﺮﺕ ﻷﻛﺘﺮ ﻣﻦ ﻙﻻﺱ‬
‫ﻳﻌﻨﻰ ﺍﻧﺎ ﺍﻟﻚﻻﺱ ﺑﺘﺎﻋﺘﻰ ﻛـ‪ child‬ﺑﺘﻮﺭﺙ ﻣﻦ ﻙﻻﺱ ﺍﺑﺴﺘﺮﺍﻛﺖ ﻛـ ‪ parent‬ﻣﺶ ﻫﻘﺪﺭ ﻳﻜﻮﻧﻠﻰ ﺍﻛﺘﺮ ﻣﻦ ﺑﺎﺭﻧﺖ ﻭﺍﺣﺪ ﺑﺲ ﻳﻌﻨﻰ‬
‫​ ‪class‬‬‫​ ‪child‬‬ ‫​ ‪extends‬‬
‫ﺍﻟﻚﻻﻡ ﺩﻩ ﻏﻠﻂ ← ‪parentone , parent two ///‬‬
‫ﻣﻘﺪﺭﺵ ﺍﻭﺭﺙ ﻏﻴﺮ ﻣﻦ ﻙﻻﺱ ﻭﺍﺣﺪﻩ ﺑﺲ‬
‫ﺍﻧﻤﺎ ﺑﻘﻰ ﺍﻻﻧﺘﺮﻓﻴﺲ ﺍﻗﺪﺭ ﺍﻋﻤﻞ ﺍﻣﺒﻠﻴﻤﻨﺖ ﻷﻛﺘﺮ ﻣﻦ ﺍﻧﺘﺮﻓﻴﺲ‬
‫​ ‪class‬‬‫​ ‪child‬‬ ‫​ ‪implement‬‬‫​‪interfaceOne , interfaceTwo , interfaceThree‬‬ ‫ﺍﻟﻚﻻﻡ ﺩﻩ ﺻﺢ ← ‪//‬‬

‫____________________________________________________________________________‬
‫‪Prepared By‬‬

‫‪Mohamed Ramadan | Open Source | Intake #35‬‬ ‫​‬


‫‪Java Developer at‬‬

You might also like