السلام عليكم جميعا
حابه استفسر عن شغله وهي بخصوص ال cast
شو غرضها ولشو تستخدم واي وقت تستخدم؟
السلام عليكم جميعا
حابه استفسر عن شغله وهي بخصوص ال cast
شو غرضها ولشو تستخدم واي وقت تستخدم؟
مثال
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
مشكورين
لكن ليها وقت معين للاستخدام؟
الموضوع يحتاج إلى بعض التفصيل
ليس كل الأنواع يمكن أن تستخدمي عملية التحويل 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
أتمنى أن أكون وضحت الفكرة
الله معك
أحيانا أختي تحتاجين إستخدامها
أعطيك مثال
فيه 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 بإستخدام الكاستنق ,,, ;)
أتمنى الأفكار تكون وضحت أكثر
أظن أخي الكريم أن عملية التحويل من String إلى Int سيعطيك خطأ
حتى لو استخدمت النوع Integer فستحصل على خطأ في عملية الترجمة
والطريقة الصحيحة من خلال
Integer.parseInt(string);
الله معك
كنت اسمع انه بتم فيها تحويل اي نوع من الكبير للصغير
مشكورين وما قصرتوا
قبل ان تقوم بعملية ال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
هذا بشكل بببسيط جداً والمسأله معقده ولا أريد الدخول فيها إلا اذا كان لك سؤال محدد
PinBall aBall = (PinBall) balls.elementAt(i);
Here we cast the value into the type PinBall.
هذا المثال اللي كان مكتوب عندي
سبحان الله
ياأختي تعبي نفسك شوي واقراي ....
سبحان الله يا عيسى
شكلك ناوي تزعلني منك
لازم تكون متسع صدر
بالنسبة للمثال يا أختي الكريمة يظهر أن عندك كائن من النوع كرة وكائن من النوع كرة صغيرة
والظاهر الكائن الأخير يقوم بوراثة الكائن كرة
بالتالي فأنتي عندما تقومين بالتحويل ببساطة لن تحصلي على أي مشاكل لأنك تقومين بالتحويل من كصغير إلى كبير
للتحويل من كبير إلى صغير هناك إمكانية لذلك هو أن يكون أصل الكائن من النوع الصغير ولكنا قمنا بتحويله إلى كبير من قبل
أتمنى أن تكون وصلت الفكرة
لا تزعل مني يا أخ عيسى إن صدر مني ما يسيء لك فبدون قصد
الله معكم
اعتقد الاوبجكت ball نوع من الـ Collections
ممكن Vector
فهذه الانواع تعيد الاوبجكت من نوع Object لذا لزم تحويلها الى النوع المراد وهو PinBall وهو ايضا من نوع Object
By Default
منقطع من حين لاخر
dr_abdalrhman كتب:السلام عليكمارجو بيفيدك هذا شرح جميل ووافى
بالتوفيق ان شاء الله
شكرا جزيلا لقد أستفدت كثيرا ووضح لي موضوع ال
casting بشكل مبسط ولذيذ
شكرا جزيلا وجزاك الله عني خيرا
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 مين لازم يكون سوبر اللي بحوله والا اللي بيتحوله
تذكر معنى الوراثه
الوراثه تعني : أب وابن
الأبن بالتأكيد يحتوي على كل المعلومات في الأب (لأنه ورثها منه )
والعلاقه هنا تكون من الاقل ( الابن ) الى الأعلى (الأب)
لكن الأب قد يحتوي وقد لايحتوي على كل المعلومات في الأبن
اقتباسA Class type can be converted to a Class type or to an interface type. If converting to a Classtype, the new type must be a superclass of the old type. If converting to an interface type,
the old Class must implement the interface