الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن ال Cast بالجافا

بدأه زهرهـ في 23 أكتوبر 2007 · 15 رد · 4,648 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم جميعا

حابه استفسر عن شغله وهي بخصوص ال cast

شو غرضها ولشو تستخدم واي وقت تستخدم؟

#2

تستخدم للتحويل من نوع Type الى اخر

منقطع من حين لاخر

#3

مثال

public class casting
{
	   public static void main(String[] args)
	   {
			  double i = 54.3;
			  System.out.println(i);
			 //  بتكون النتيجة طباعة 54.3

			  int j = (int)i;
			  System.out.println(j);
	//بتكون النتيجة طباعة 54 لأننا حولنا الدبل إلى إنتجر
	   }
}

زي ماقالوا الشباب

تحويل من نوع إلى نوع ,, من دبل إلى إنتجر ,, من إنتجر إلى سترينق ,, من سترينق إلى إنتجر وهكذا

وممكن من أي نوع كلاس إلى أي كلاس آخر

تم تعديل هذه المشاركة بواسطة Mo 9a7i في 23 أكتوبر 2007 في 14:03

#4

مشكورين

لكن ليها وقت معين للاستخدام؟

#5

الموضوع يحتاج إلى بعض التفصيل

ليس كل الأنواع يمكن أن تستخدمي عملية التحويل casting لتحويلها إلى نوع آخر

بالطبع الأنواع الأساسية مثل Int ,double يمكن التحويل بينها دائماً(أرجو التصحيح إن كان هناك خطأ)

بالنسبة للأنواع غير الأساسية يجب أن يكون الكائن المحول من فئة تشتق النوع المحول إليه وإلا فإنك ستحصلين على Casting Exception

لاحظي معي الشيفرة التالية

public class A {
	public void get(){

	}
}

public class B extends A{
	public void is(){

	}
	public static void main(String[] args) {
		A a1=new A();
		B b1=(B)a1;
	}
}

لاحظي عند تشغيل البرنامج السابق ستحصلي على ClassCastException

ثم لاحظي الشيفرة التالية

public class B extends A{
	public void is(){

	}
	public static void main(String[] args) {
		B b2= new B();
		A a2=(A)b2;
	}
}

ستجدي أن البرنامج قبل التحويل

لكنك لن تري إلى الطرق methods الموجود في النوع الأب الذي هو في حالتنا A

أتمنى أن أكون وضحت الفكرة

الله معك

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

أحيانا أختي تحتاجين إستخدامها

أعطيك مثال

فيه Method ب كلاس الماث تعطينا رقم عشوائي

Math.random()

الرقم يكون بين ال 0 وال 1 وصيغتـه double

أمثلة:

0.4342531121

0.0155478653

0.6435432454

لنفرض إنك تحتاجين رقم عشوائي بين الواحد والعشرة وتكون صيغتـه integer

إش تسوين ؟

تضربين الرقم العشوائي بعشرة

على سبيل المثال هذا الرقم

0.6534243454

بعد الضرب بعشرة بيصير كذا

6.534243454

إحنا نبغى رقم الستـة فقط ,, الباقي مانبغاه

نحوله لإنتجر

(int)6.534246543

هذا مثال

مثال آخر

المستخدم يدخل سطر معلومات يكتب مثلا

أبلغ من العمر 16 عاماً

الآن ,, نوع هذا السطر سوف يكون String

نقوم بتقطيعه ,, ونأخذ منه الرقم بأي طريقـــة

بإستخدام ال substring وال indexOf

والناتج يكون عندنا String جديد وقيمته "16"

نريد ان نعمل على هذا الرقم بس المشكلة إنه String

نحوله إلى int بإستخدام الكاستنق ,,, ;)

أتمنى الأفكار تكون وضحت أكثر

#7

أظن أخي الكريم أن عملية التحويل من String إلى Int سيعطيك خطأ

حتى لو استخدمت النوع Integer فستحصل على خطأ في عملية الترجمة

والطريقة الصحيحة من خلال

Integer.parseInt(string);

الله معك

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#8

كنت اسمع انه بتم فيها تحويل اي نوع من الكبير للصغير

مشكورين وما قصرتوا

#9

قبل ان تقوم بعملية الcasting لابد ان تكون على علم بماهية العلاقه بين النوعين المحول منه والمحول اليه

هناك implicitly cast , explicit cast

class A {
	public static void main (String [] ags){
		A a1=new A();
		B b1=new B();
		A a2;
		B b2;
		a2=b1;   // implicit cast
		b2=(B)a2;// explicit cast 
		int i=3;
		long l=i; // implicit cast
		Object obj =a1; // implicit cast

	}
}
class B extends A{

}

لاحظ انك عندما تريد التحويل من صغير إلى كبير مثل من int الى long فانك لست مجبراً على ان تكتب :

 long l=(long)i;

ولو كتبتها فلا مشكله وهذا مايسمى implicit cast

في الجهه المقابله عندما تحول من صغير إلى كبير فلابد ان تحولها ظاهريا explicit cast

  b2=(B)a2;// explicit cast

هذا بشكل بببسيط جداً والمسأله معقده ولا أريد الدخول فيها إلا اذا كان لك سؤال محدد

#10
PinBall aBall = (PinBall) balls.elementAt(i);

Here we cast the value into the type PinBall.

هذا المثال اللي كان مكتوب عندي

#11

سبحان الله

ياأختي تعبي نفسك شوي واقراي ....

#12

سبحان الله يا عيسى

شكلك ناوي تزعلني منك

لازم تكون متسع صدر

بالنسبة للمثال يا أختي الكريمة يظهر أن عندك كائن من النوع كرة وكائن من النوع كرة صغيرة

والظاهر الكائن الأخير يقوم بوراثة الكائن كرة

بالتالي فأنتي عندما تقومين بالتحويل ببساطة لن تحصلي على أي مشاكل لأنك تقومين بالتحويل من كصغير إلى كبير

للتحويل من كبير إلى صغير هناك إمكانية لذلك هو أن يكون أصل الكائن من النوع الصغير ولكنا قمنا بتحويله إلى كبير من قبل

أتمنى أن تكون وصلت الفكرة

لا تزعل مني يا أخ عيسى إن صدر مني ما يسيء لك فبدون قصد

الله معكم

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#13

اعتقد الاوبجكت ball نوع من الـ Collections

ممكن Vector

فهذه الانواع تعيد الاوبجكت من نوع Object لذا لزم تحويلها الى النوع المراد وهو PinBall وهو ايضا من نوع Object

By Default

منقطع من حين لاخر

#14
dr_abdalrhman كتب:
السلام عليكم

ارجو بيفيدك هذا شرح جميل ووافى

بالتوفيق ان شاء الله

شكرا جزيلا لقد أستفدت كثيرا ووضح لي موضوع ال

casting بشكل مبسط ولذيذ

شكرا جزيلا وجزاك الله عني خيرا

#15

This is the general format of an assignment conversion from an Oldtype to a Newtype. Unfortunately,

Oldtype can be a class, an interface, or an array; Newtype can also be a class, an interface,

or an array. Thus there are nine (3 3) possible combinations to consider

In general, object reference conversion is permitted when the direction of

the conversion is “up” the inheritance hierarchy; that is, the old type should inherit from the

new type. This rule of thumb does not cover all nine cases, but it is a helpful way to look

at things.

The rules for object reference conversion can be stated as follows:

_ An interface type can be converted only to an interface type or to Object. If the new type

is an interface, it must be a superinterface of the old type.

_ A class type can be converted to a class type or to an interface type. If converting to a class

type, the new type must be a superclass of the old type. If converting to an interface type,

the old class must implement the interface.

_ An array may be converted to the class Object, to the interface Cloneable or Serializable,

or to an array. Only an array of object reference types can be converted to an array, and the

old element type must be convertible to the new element type

الجزء دا مش فاهمه كويس لو ممكن حد يوضحهولي يعني لما أجي أعمل conversion ل objectrefference مين لازم يكون سوبر اللي بحوله والا اللي بيتحوله

#16

تذكر معنى الوراثه

الوراثه تعني : أب وابن

الأبن بالتأكيد يحتوي على كل المعلومات في الأب (لأنه ورثها منه )

والعلاقه هنا تكون من الاقل ( الابن ) الى الأعلى (الأب)

لكن الأب قد يحتوي وقد لايحتوي على كل المعلومات في الأبن

اقتباس
A Class type can be converted to a Class type or to an interface type. If converting to a Class

type, the new type must be a superclass of the old type. If converting to an interface type,

the old Class must implement the interface

مواضيع مشابهة