Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

อะไรคือความแตกต่างระหว่าง Widening Casting (Implicit) และ Narrowing Casting (Explicit) ใน Java?


A การหล่อแบบ ใน Java ใช้เพื่อแปลงวัตถุหรือตัวแปรประเภทหนึ่งเป็นอีกประเภทหนึ่ง เมื่อเรากำลังแปลงหรือกำหนดประเภทข้อมูลหนึ่งไปยังอีกประเภทหนึ่ง ข้อมูลเหล่านั้นอาจเข้ากันไม่ได้ หากเหมาะสมก็จะทำได้อย่างราบรื่นไม่เช่นนั้นข้อมูลจะสูญหาย

พิมพ์ประเภทการแคสต์ใน Java

Java Type Casting แบ่งออกเป็น 2 ประเภท

  • ขยายการหล่อ (โดยนัย ) – การแปลงประเภทอัตโนมัติ
  • จำกัดการแคสต์ (โจ่งแจ้ง ) – ต้องการการแปลงที่ชัดเจน

การหล่อแบบขยาย (แบบเล็กไปใหญ่)

ขยาย ype Conversion อาจเกิดขึ้นได้หากทั้งสองประเภทเข้ากันได้และประเภทเป้าหมายมีขนาดใหญ่กว่าประเภทต้นทาง Widening Casting เกิดขึ้นเมื่อสองประเภทเข้ากันได้ และ ประเภทเป้าหมายนั้นใหญ่กว่าประเภทต้นทาง .

ตัวอย่าง1

public class ImplicitCastingExample {
   public static void main(String args[]) {
      byte i = 40;
      // No casting needed for below conversion
      short j = i;
      int k = j;
      long l = k;
      float m = l;
      double n = m;
      System.out.println("byte value : "+i);
      System.out.println("short value : "+j);
      System.out.println("int value : "+k);
      System.out.println("long value : "+l);
      System.out.println("float value : "+m);
      System.out.println("double value : "+n);
   }
}

ผลลัพธ์

byte value : 40
short value : 40
int value : 40
long value : 40
float value : 40.0
double value : 40.0

การขยายขอบเขตของประเภทคลาส

ในตัวอย่างด้านล่าง ลูก class เป็นประเภทที่เล็กกว่าที่เรากำหนดให้ ผู้ปกครอง ประเภทคลาสซึ่งเป็นประเภทที่ใหญ่กว่าจึงไม่จำเป็นต้องทำการหล่อ

ตัวอย่าง2

class Parent {
   public void display() {
      System.out.println("Parent class display() called");
   }
}
public class Child extends Parent {
   public static void main(String args[]) {
      Parent p = new Child();
      p.display();
   }
}

ผลลัพธ์

Parent class display() method called

การหล่อแบบแคบ (แบบใหญ่ไปเล็ก)

เมื่อเรากำหนดประเภทที่ใหญ่กว่าให้กับประเภทที่เล็กกว่า Explicit Casting เป็นสิ่งจำเป็น

ตัวอย่าง1

public class ExplicitCastingExample {
   public static void main(String args[]) {
      double d = 30.0;
      // Explicit casting is needed for below conversion
      float f = (float) d;
      long l = (long) f;
      int i = (int) l;
      short s = (short) i;
      byte b = (byte) s;
      System.out.println("double value : "+d);
      System.out.println("float value : "+f);
      System.out.println("long value : "+l);
      System.out.println("int value : "+i);
      System.out.println("short value : "+s);
      System.out.println("byte value : "+b);
   }
}

ผลลัพธ์

double value : 30.0
float value : 30.0
long value : 30
int value : 30
short value : 30
byte value : 30


การจำกัดประเภทคลาสให้แคบลง

เมื่อเรากำหนดประเภทที่ใหญ่กว่าให้กับประเภทที่เล็กกว่า เราต้องอย่างชัดเจน พิมพ์ดีด มัน.

ตัวอย่าง2

class Parent {
   public void display() {
      System.out.println("Parent class display() method called");
   }
}
public class Child extends Parent {
   public void display() {
      System.out.println("Child class display() method called");
   }
   public static void main(String args[]) {
      Parent p = new Child();
      Child c = (Child) p;
      c.display();
   }
}

ผลลัพธ์

Child class display() method called