Lecture10 1239357245

2,029 views

Published on

JAVA

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,029
On SlideShare
0
From Embeds
0
Number of Embeds
1,512
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lecture10 1239357245

  1. 1. 1 Объект хандлагатОбъект хандлагат програмчлалын хэлпрограмчлалын хэл JavaJava ХичээлХичээл:: SW203SW203 УлиралУлирал:: 20092009 оны хавароны хавар БагшБагш:: Д.ЭнхжаргалД.Энхжаргал Төрөл хувиргалт: автомат ба механик төрөл хувиргалт Mongolia University of Science & TechnologyMongolia University of Science & Technology
  2. 2. 2 JavaJava хэлний өгөгдлийн үндсэн төрлүүдхэлний өгөгдлийн үндсэн төрлүүд
  3. 3. 3  Аливаа програмчлалын хэлний хувьд төрөл хувиргалтын асуудал яригддаг. Иймд ямар нэг програмчлалын хэл дээр амжилттай програм бичихийн тулд тухайн хэлний төрөл хувиргах зарчмын талаар тодорхой ойлголттой байх нь чухал.  Java компилятор нь төрлүүдийг хооронд нь хөрвүүлэх дараах 2 хэлбэрээр хангагдсан. Үүнд:  Автоматаар (Automathic): Хэрэв тухайн 2 төрөл нэг бүлэгт багтаж байвал тэдгээрийг хоорондоо нийцтэй төрлүүд (compatible types) гэж үзээд Java компилятор нь түүнийг автоматаар хөрвүүлдэг.  Гар аргаар (Manual): Хэрэв тухайн 2 төрөл хоорондоо нийцгүй (incompatible) байвал төрлийг автоматаар хөрвүүлэх боломжгүй тул хөрвүүлэлтийг гар аргаар (төрөл хувиргалт /type cast/-ыг) хийх шаардлагатай. Мөн нийцтэй төрлүүдийн зарим онцгой тохиолдолд мөн төрөл хувиргалтыг гүйцэтгэнэ. JavaJava хэлний Төрөл хөрвүүлэх зарчимхэлний Төрөл хөрвүүлэх зарчим
  4. 4. 4  Java хэлэнд дараах 2 хэлбэрийн өгөгдлийг тодорхойлж ашигладаг болохыг бид мэднэ. Үүнд:  Primitive data type энгийн буюу Өгөгдлийн Үндсэн Төрөл (ӨҮТ) ТайлбарТайлбар:: Java хэлний ӨҮТ-д byte, short, int, long, char, float, double болон boolean гэсэн найман үндсэн төрөл багтдаг. Эдгээр энгийн буюу үндсэн өгөгдлийн төрлүүд нь дандан хувьсагчийг тодорхойлдог. Өгөгдлийн бүх төрлүүд нь ашиглаж байгаа битээсээ хамааран тодорхой интервалд утга нь хэлбэлздэг.  Object reference data type заалт буюу Өгөгдлийн Хийсвэр Төрөл (ӨХТ) Тайлбар:Тайлбар: Java хэл нь объект хандлагат програмчлалын хэл учраас түүнд class, interface гэх мэтийн үүссэнүүссэн буюу ӨХТ-үүдийг өргөн ашигладаг.  Иймд төрлийн хөрвүүлэлтийн тухай авч үзэхийн тулд бид дараах 4 хэлбэрийг ярих шаардлагатай. Үүнд:  ӨҮТ-ийг хөрвүүлэх (conversion)  ӨҮТ-ийг хувиргах (casting)  ӨXТ-ийг хөрвүүлэх (conversion)  ӨXТ-ийг хувиргах (casting) JavaJava хэлний өгөгдлийн төрлүүдхэлний өгөгдлийн төрлүүд ((Үндсэн ойлголт сэргээх нь)
  5. 5. 5 ӨҮТ-ийн хөрвүүлэлтӨҮТ-ийн хөрвүүлэлт (Conversion of primitives(Conversion of primitives))  ӨҮТ-ийн хувьд хөрвүүлэлт хийхдээ дараах 3 тохиолдлыг авч үзнэ. Үүнд:  Утга олголт (Assignment)  Функц дуудалт (Method call)  Арифметик үйлдэл (Arithmetic promotion)  ӨҮТ-ийн хувьд хийгдэх аливаа төрөл хөрвүүлэлт нь компиляцын үед хийгддэг. Учир нь компиляцын үед тухайн төрөл хөрвүүлэлтийг дүрмийн дагуу эсвэл дүрэм зөрчсөн эсэхийг тогтоох бөгөөд хэрэв дүрмийн дагуу зөв хийгдээгүй бол алдааны мэдээлэл өгнө.  Санамж: Булийн төрлөөс бусад төрөл рүү, бусад төрлөөс булийн төрөл рүү хөрвүүлэлт хэзээ ч хийгдэхгүй
  6. 6. 6 Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү  Одоо Утга олголт (Assignment)-ийг авч зье.ү  Жишээ 1:  int i;  double d;  i=10;  d=i;  Дээрх жишээний d=i; гэсэн мөрөнд i гэсэн int хувьсагчийн утгыг double төрлийн d хувьсагчид олгож байна. int төрлийн өргөн нь double төрлийн өргөнөөс ихгүй тул Java компилятор int төрлийг double төрөл рүү автоматаар хөрвүүлнэ.  Жишээ 2:  double d;  short s;  d=1.2345;  s=d;  Дээрх жишээний s=d; гэсэн мөрөнд d гэсэн double хувьсагчийн утгыг short төрлийн s хувьсагчид олгож байна. double төрлийн өргөн нь short төрлийн өргөнөөс их тул Java компилятор алдаа заана.
  7. 7. 7 Компилятор энд алдаа заана !!! double төрлийн утгыг short төрөл рүү хөрвүүлж dайна  Т-ийн хувьд утга олгох ед х рв лэлт хийхдээ дараах д рмийгӨҮ ү ө үү ү баримтална.  Буллийн хувьсагчийн утгыг бусад т рлийн хувьсагчид оноохө боломжг й.ү  Буллийн бус хувьсагчийн утгыг р буллийн бус хувьсагчийн утгаөө руу х рв лэх боломжтойө үү бол т нийгүү рг тг с н х рв лэлтө ө ө ө ө үүрг тг с н х рв лэлтө ө ө ө ө үү (widening conversion)(widening conversion) гэнэ. Жич: Энд утга олгох гэж буй т рлийн рг н нь утга олгогдох гэж буйө ө ө т рлийн рг н с ихг й байнаө ө ө өө ү  int i;  double d;  i=10;  d=i;  Буллийн бус хувьсагчийн утгыг өөр буллийн бус хувьсагчийн утга руу хөрвүүлэх боломжгүй бол явцуу хөрвүүлэлтявцуу хөрвүүлэлт (narrow(narrow conversion)conversion) гэнэ. Жич: Энд утга олгох гэж буй төрлийн өргөн нь утга олгогдох гэж буй төрлийн өргөнөөс их байна  double d;  short s;  d=1.2345;  s=d; Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү int төрлийн утгыг double төрөл рүү хөрвүүлж байна
  8. 8. 8  “Өргөтгөсөн хөрвүүлэлтийн үед утга олгох гэж буй төрлийн өргөн нь утга олгогдох гэж буй төрлийн өргөнөөс ихгүй байна” гэсэн мөрдлөгийг дэлгэрэнгүй тайлбарлъя.  Дээрх зурагт java хэлний өгөгдлийн үндсэн төрлүүдийг битийн хэмжээнээс нь хамааруулан зүүнээс баруун тийш жагсааж байрлуулан сумтай шугамаар холбосон байна. Тухайлбал: int төрөл нь byte, short, char гэсэн 3 төрлөөс том төрөл гэсэн үг. Иймд byte, short, char төрлийн хувьсагчдыг int төрөл рүү автоматаар хөрвүүлэх боломжтой. Иймд утга олгогдох төрлийн өргөн нь эх төрлийнхөөс багагүй байх тохиолдолд хөрвүүлэлтийг автоматаар хийх боломжтой болох нь харагдаж байна. Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү char shortbyte int long float double
  9. 9. 9  Эндээс дараах дүрмийг гаргаж болно.  Өргөтгөсөн хөрвүүлэлтӨргөтгөсөн хөрвүүлэлт (widening conversion)(widening conversion)-ийн үед-ийн үед  byte төрлөөс short, int, long, float, double төрөл рүү  short төрлөөс int, long, float, double төрөл рүү  int төрлөөс long, float, double төрөл рүү  long төрлөөс float, double төрөл рүү  float төрлөөс double төрөл рүү тус тус автоматаар х рв лэхө үүтус тус автоматаар х рв лэхө үү боломжтойболомжтой  Иймд өргөтгөсөн хөрвүүлэлтИймд өргөтгөсөн хөрвүүлэлт (widening conversion)(widening conversion)-ийн үед-ийн үед мэдээллийн алдагдал гарахгүй гэсэн дүгнэлтэнд хүрч байна.мэдээллийн алдагдал гарахгүй гэсэн дүгнэлтэнд хүрч байна. Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
  10. 10. 10  Харин сумны эсрэг чиглэлд бол боломжгүй. Өх: int төрлийн хувьсагчийн byte төрөл рүү хөрвүүлвэх боломжгүй. Учир нь byte төрөл нь 1 байт, int төрөл 4 байтын хэмжээтэй тул өргөн нь бага хэмжээтэй төрөл рүү хөрвүүлэхэд зарим орон хаягдахад хүрнэ. Эндээс дээрх зурагны сумтай шугамны зүүн гар талд орших төрлийг түүний баруун гар талд орших ямар ч төрөл рүү хөрвүүлэх боломжтой. Харин эсрэгээр өгөгдлийн төрлийг түүний зүүн гар талд орших ямарч төрөл рүү хөрвүүлэх боломжгүй байдаг тул компилятор түүнийг алдаанд тооцдог. Алдааг засахыг тулд төрөл хувиргалт буюу “type casting” хийнэ. char shortbyte int long float double Энгийн төрлийн хөрвүүлэлт: Утга олголтЭнгийн төрлийн хөрвүүлэлт: Утга олголт
  11. 11. 11  Эндээс дараах д рмийг гаргаж болно.ү  Явцуу хөрвүүлэлтЯвцуу хөрвүүлэлт (narrow conversion)(narrow conversion)-ийн үед-ийн үед  byte төрлөөс char төрөл рүү  short төрлөөс byte, char төрөл рүү  char төрлөөс byte, short төрөл рүү  int төрлөөс byte, short, char төрөл рүү  long төрлөөс byte, short, char, int төрөл рүү  float төрлөөс byte, short, char, int, long төрөл рүү  double төрлөөс byte, short, char, int, long, float төрөл рүү тус тустус тус автоматаар хөрвүүлэх боломжгүй. Учир нь мэдээллийнавтоматаар хөрвүүлэх боломжгүй. Учир нь мэдээллийн алдагдалд орох аюултай тул Явцуу хөрвүүлэлталдагдалд орох аюултай тул Явцуу хөрвүүлэлт (narrow(narrow conversion)conversion)-ийн үед-ийн үед төрөл хувиргалттөрөл хувиргалт (type cast)(type cast)-ыг хийнэ.-ыг хийнэ.  CastingCasting гэдэг нь нэг ёсондоогэдэг нь нэг ёсондоо явцуу хөрвүүлэлтийн үед мэдээллийнявцуу хөрвүүлэлтийн үед мэдээллийн алдагдалд орох эрсдлээс сэргийлэхийг компиляторт анхааруулжалдагдалд орох эрсдлээс сэргийлэхийг компиляторт анхааруулж буй хэрэг юм.буй хэрэг юм. Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
  12. 12. 12  Явцуу х рв лэлтө үүЯвцуу х рв лэлтө үү (narrow conversion)(narrow conversion)–ийн жишээ–ийн жишээ short s=259; byte b= s; // Энд компилятор алдаа заана System.out.println(“s=”+s+”, b=”+b);  Алдааг засахдаа т р л хувиргах йлдэл хийнэ.ө ө үАлдааг засахдаа т р л хувиргах йлдэл хийнэ.ө ө ү short s=259; byte b=(byte) s; // Т р л хувиргалтө ө System.out.println(“b=”+b);  Ийнх т р л хувиргалтыг хийхдээ дугуй хос хаалт ашиглана.үү ө өИйнх т р л хувиргалтыг хийхдээ дугуй хос хаалт ашиглана.үү ө ө  Одоо b хувьсагч ямар утга авах вэ?Одоо b хувьсагч ямар утга авах вэ? хэрэв s хувьсагчийн утга byte төрлийн тодорхойлогдох мужаас (256) хэтэрсэн байвал тодорхойлогдох мужийн хамгийн их утгыг модулиар жишиж авна. s хувьсагчийн утга 259 (хоёртоор 100000011) бөгөөд түүнийг 256 модулиар жишихэд 3 тул b=3; болно. Төрөл хувиргалтТөрөл хувиргалт (Casting)(Casting)
  13. 13. 13 Зураг: short төрлийг byte төрөлд хувиргах Төрөл хувиргалтТөрөл хувиргалт (Casting)(Casting)  Эндээс харахад тоо нь х рв хө ө т рлийнх тодорхойлогдох мужаасө өө хэтэрвэл х рв х т рлийнө ө ө тодорхойлогдох мужийн хамгийн их утгыг модулиар жишиж авна.  Харин бодит тоог б хэл тоо рууү х рв лэхдээ хэрчигдсэнө үү (transaction) хувиргалтыг хийнэ. Х: бодит тоогӨ б хэл тоо руу х рв лэхдээ т нийү ө үү үү бутархай хэсгийг хэрчин хаяж б хэлү хэсгийг нь авч ашиглах б г д угө өө бодит тоо нь х рв х т рлийнхө ө ө өө тодорхойлогдох мужаас хэтэрвэл м нө л х рв х т рлийн тодорхойлогдохө ө ө мужийн хамгийн их утгыг модулиар жишиж авна.
  14. 14. 14 Т-ийн х рв лэлт: Функц дуудалтӨҮ ө үүТ-ийн х рв лэлт: Функц дуудалтӨҮ ө үү  Т р л х рв лэлтийн р нэг хэрэглээ бол функц дуудалт юм.ө ө ө үү өөТ р л х рв лэлтийн р нэг хэрэглээ бол функц дуудалт юм.ө ө ө үү өө Энэ нь функцыг дуудахдаа зарлагдсан т рл с нь р т рлийнө өө өө өЭнэ нь функцыг дуудахдаа зарлагдсан т рл с нь р т рлийнө өө өө ө аргументтай дуудах ед яригдана.үаргументтай дуудах ед яригдана.ү  Дараах н хц лд функцыг дуудахдаа т ний аргументынө ө үүДараах н хц лд функцыг дуудахдаа т ний аргументынө ө үү т рл с р т рлийн аргументтай дуудаж болдог. нд:ө өө өө ө Үүт рл с р т рлийн аргументтай дуудаж болдог. нд:ө өө өө ө Үү дуудаж буй аргументын т р л нь уул функцын аргументынө өдуудаж буй аргументын т р л нь уул функцын аргументынө ө т рл с рг н р ихг й байх ёстой.ө өө ө ө өө өө үт рл с рг н р ихг й байх ёстой.ө өө ө ө өө өө ү  Жишээ нь:Жишээ нь:  float frads=2.34567f;  double d;  d= Math.cos(frads);  System.out.println("d="+d); Math.cos() нь double төрлийн 1 аргументтай стандарт функц билээ . Энд түүнийг float төрлийн аргументтай дуудаж байна. float төрлийн өргөн double төрлийн өргөнөөс ихгүй тул төрлийг автоматаар хөрвүүлэх учраас компилятор алдаа заахгүй
  15. 15. 15 Энгийн т рлийн х рв лэлт: Функц дуудалтө ө үүЭнгийн т рлийн х рв лэлт: Функц дуудалтө ө үү  Харин функцыг дуудаж буй аргументын т р л нь уул функцынө өХарин функцыг дуудаж буй аргументын т р л нь уул функцынө ө аргументын т рл с рг н р их байвал компилятор алдаа заахө өө ө ө өө өөаргументын т рл с рг н р их байвал компилятор алдаа заахө өө ө ө өө өө б г д энэ тохиолдолд т р л хувиргалтө өө ө өб г д энэ тохиолдолд т р л хувиргалтө өө ө ө (casting)(casting) хийнэ.хийнэ. Жишээ:Жишээ:  class A{  public int inc(int i){  return i+1;  }  }  public class test2{  public static void main(String args[]){  double d=12.0;  int k;  A a= new A();  k=a.inc(d);  System.out.println("K="+k);  }  } int төрлийн 1 аргументтай double төрлийн 1 аргументтай дуудахад компилятор алдаа заана. k=a.inc((int)d); болгож өөрчлөх замаар Casting хийх
  16. 16. 16  Т р л х рв лэлтийн р нэг хэрэглээ бол арифметикө ө ө үү өөТ р л х рв лэлтийн р нэг хэрэглээ бол арифметикө ө ө үү өө илэрхийлэл юм. Ямар нэг илэрхийллийн р д нг хувьсагчид олгохү үилэрхийлэл юм. Ямар нэг илэрхийллийн р д нг хувьсагчид олгохү ү ед т р л таарахг й бол хувиргалт хийдэг. нийгү ө ө ү Үүед т р л таарахг й бол хувиргалт хийдэг. нийгү ө ө ү Үү илэрхийллийн т р л хувиргалт гэнэ.ө өилэрхийллийн т р л хувиргалт гэнэ.ө ө  Илэрхийлэлд орсон үйлдлээс хамааран гахах утгынИлэрхийлэлд орсон үйлдлээс хамааран гахах утгын . .нарийвчлал янз бүр айдаг Жишээ нь. .нарийвчлал янз бүр айдаг Жишээ нь  byte a=60;  byte b=50;  byte c=100;  int d=a*b/c;  a*ba*b гэсэн завсрын үйлдлийн үр дүнгэсэн завсрын үйлдлийн үр дүн bytebyte төрлийн мужаастөрлийн мужаас хэтэрнэ. Иймдхэтэрнэ. Иймд JavaJava хэлэнд бүххэлэнд бүх bytebyte болонболон shortshort төрлийнтөрлийн хувьсагчид орсон операндын үр дүнг автоматаар өргөтгөнхувьсагчид орсон операндын үр дүнг автоматаар өргөтгөн intint төрөлд хөрвүүлэн үр дүн болох 3000 гэсэн утгыг завсрынтөрөлд хөрвүүлэн үр дүн болох 3000 гэсэн утгыг завсрын intint төрлийн хувьсагчид хадгална. Ийнхүү автомат төрөлтөрлийн хувьсагчид хадгална. Ийнхүү автомат төрөл хувиргалтыг дээрх илэрхийллийн хувьд хэрэгжүүлж байна.хувиргалтыг дээрх илэрхийллийн хувьд хэрэгжүүлж байна. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  17. 17. 17  Java хэлэнд илэрхийллийн төрлийг өргөтгөхдөө илэрхийлэл дэх оператор нь унар оператор уу, бинар оператор уу гэдгээс хамаардаг.  Byte болон short операнд орсон илэрхийллийн үр дүнг автоматаар өргөтгөн int төрөлд хөрвүүлэхдээ дараах хэдэн зарчмыг баримтална. Үүнд:  Õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã îïåðàíä íü double áîë íºãºº îïåðàíäûã íü double òºðºë ð¿¿ ºðãºòãºíº.  ¯ã¿é áîë õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã îïåðàíä íü float áîë íºãºº îïåðàíäûã íü float òºðºë ð¿¿ ºðãºòãºíº.  ¯ã¿é áîë õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã îïåðàíä íü long áîë íºãºº îïåðàíäûã íü long òºðºë ð¿¿ ºðãºòãºíº.  ¯ã¿é áîë 2 îïåðàòîðûã õî¸óëàíãèé íü int òºðºë ð¿¿ ºðãºòãºíº. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  18. 18. 18 Ïðîãðàìûí double result=((f* b)+(i/c)-(d* s)); ãýñýí ìºðºíä òàéëáàð õèéå.  (f* b) èëýðõèéëýëä b îïåðàíäûí òºðëèéã float òºð뺺ð ºðãºòãºí ¿ð ä¿í íü float òºðºë ãàðíà.  (i/c) èëýðõèéëýëä c îïåðàíäûí òºðëèéã int òºð뺺ð ºðãºòãºí ¿ð ä¿í íü int òºðºë ãàðíà.  (d* s) èëýðõèéëýëä s îïåðàíäûí òºðëèéã double òºð뺺ð ºðãºòãºí ¿ð ä¿í íü double òºðºë ãàðíà. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  19. 19. 19 Äýýðõ äýä èëýðõèéëëèéí ¿ð ä¿í áîëîõ float, int áîëîí double òºðëèéí îïåðàíäóóä äýýð ¿éëäýë õèéõäýý float, int îïåàðàíäóóäûí íèéëáýðèéí ¿ð ä¿í float òºðºë ãàðíà. float, double îïåàðàíäóóäûí íèéëáýðèéí ¿ð ä¿í double òºðºë ãàðíà. Èéíõ¿¿ result õóâüñàãч íü èëýðõèéëëèéí ýöñèéí ¿ð ä¿í áîëîõ double òºðºë õ¿ðòýë ºðãºòãºãäàí ãàðч áàéíà. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  20. 20. 20  Заалт т рлийн дараах хэлбэр д байдаг. нд:ө үү ҮүЗаалт т рлийн дараах хэлбэр д байдаг. нд:ө үү Үү  Клас  Интерфейс  Массив  Утга олгохУтга олгох 1. Oldtype x= new Oldtype; 2. Newtype y=x; // Заалт т рлийн хувьсагчдын утга олголтө  OldtypeOldtype нь Класс ,Интерфейс, Массив байх боломжтойгооснь Класс ,Интерфейс, Массив байх боломжтойгоос гаднагадна NewtypeNewtype нь мөн Класс ,Интерфейс, Массив байхнь мөн Класс ,Интерфейс, Массив байх боломжтой бөгөөд энд тэдгээрийн комбинаци болох 3*3боломжтой бөгөөд энд тэдгээрийн комбинаци болох 3*3=9=9 тохиолдлыг авч үзэх шаардлагатай.тохиолдлыг авч үзэх шаардлагатай. Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү
  21. 21. Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү OldtypeOldtype ньнь класскласс болбол OldtypeOldtype ньнь интерфейсинтерфейс болбол OldtypeOldtype ньнь массивмассив болбол NewtypeNewtype ньнь класскласс болбол OldtypeOldtype ньнь NewtypeNewtype- ийнхаа хүү класс байна NewtypeNewtype ньнь ObjectObject байх ёстойбайх ёстой NewtypeNewtype ньнь ObjectObject байхбайх ёстойёстой NewtypeNewtype ньнь интерфейсинтерфейс болбол OldtypeOldtype ньнь NewtypeNewtype интерфейсийгинтерфейсийг хэрэгжүүлэгч байнахэрэгжүүлэгч байна Oldtype нь Newtype интерфейсийн дэд интерфейс байна NewtypeNewtype ньнь Cloneable байхбайх ёстойёстой NewtypeNewtype ньнь массивмассив болбол Компилятор алдаа заана Компилятор алдаа заана Newtype нь Oldtype- руугаа автоматаар хөрвүүлэгдэх боломжтой. Хуучин төрлийг шинэ төрөл рүү хөрвүүлэх нь
  22. 22. 22 Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү  Дээрх х снэгтээс дараах д гнэлтийг хийж болно.ү үДээрх х снэгтээс дараах д гнэлтийг хийж болно.ү ү  Интерфейсийг 1. интерфейс рүү 2. Object класс руу хөрвүүлэх боломжтой  Классыг 1. Класс руу автоматаар х рв лж болно. Гэхдээ хуучин т р л нь шинэө үү ө ө т рлийнхээ х класс байна. Эндээс “Эх классын заалтаар х классынө үү үү объектыг заалгаж болно. Харин эсрэгээр х классын заалтаар эх классынүү объектыг заалгавал компилятор алдаа заах б г д энд т р л хувиргалтө өө ө ө (cast)-ыг хийх шаардлагатай” гэсэн д гнэлтийг хийж болно.ү 2. Интерфейс автоматаар рүү х рв лж болно. Гэхдээ хуучин т р л нь шинэө үү ө ө т рлийн интерфейсийг хэрэгж лэгч класс байнаө үү  Массивыг 1. Object класс руу хөрвүүлэх боломжтой 2. Cloneable эсвэл Serialazable интерфейс рүү хөрвүүлэх боломжтой 3. Массив руу хөрвүүлэх боломжтой. Гэхдээ хуучин төрөл нь шинэ төрөл рүүгээ автоматаар хөрвөгдөх үед л энэ нь боломжтой.
  23. 23.  Жишээ болгож дараах иерархийг авч зье.үЖишээ болгож дараах иерархийг авч зье.ү Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү Object Animal Bird Implements Flyable Tagtaa Boljmor Haraatsai Хуучин төрөл Tagtaa нь Bird гэсэн шинэ төрлийнхөө хүү класс нь тул хөрвүүлэлтийг автоматаар хийнэ
  24. 24.  Жишээ болгож дараах иерархийг авч зье.үЖишээ болгож дараах иерархийг авч зье.ү Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү Object Animal Bird Implements Flyable Tagtaa Boljmor Haraatsai Хуучин төрөл Bird нь Tagtaa гэсэн шинэ төрлийнхөө хүү нь биш эх класс нь тул компилятор алдаа заана Асуудлыг хэрхэн шийдэх вэ??? Мөрийг tagtaa = (Tagtaa)bird; мөрөөр солих. Ингэснээр compiletime алдаа заахгүй боловч runtime алдаа заана
  25. 25. 25  мн х хуудсанд дурдагдсанӨ өмн х хуудсанд дурдагдсанӨ ө runtime errorruntime error яагаад сч байна вэ?үүяагаад сч байна вэ?үү гэсэн асуулт тавигдана. нийг тайлбарлахын тулд дараахҮүгэсэн асуулт тавигдана. нийг тайлбарлахын тулд дараахҮү жишээг авч зье.үжишээг авч зье.ү ClassCastExceptionClassCastException No error in CompileTime RunTime Error

×