Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa Truyền mở rộng (Ngụ ý) và Truyền thu hẹp (Rõ ràng) trong Java là gì?


Đ Truyền loại trong Java được sử dụng để chuyển đổi các đối tượng hoặc biến của một kiểu này sang kiểu khác. Khi chúng tôi chuyển đổi hoặc gán một kiểu dữ liệu này cho một kiểu dữ liệu khác, chúng có thể không tương thích. Nếu nó phù hợp thì nó sẽ hoạt động trơn tru, nếu không có khả năng bị mất dữ liệu.

Kiểu truyền kiểu trong Java

Truyền kiểu Java được phân loại thành hai loại.

  • Truyền rộng rãi ( Ngụ ý ) - Chuyển đổi loại tự động
  • Truyền thu hẹp ( Rõ ràng ) - Cần chuyển đổi rõ ràng

Đúc mở rộng (loại nhỏ hơn đến lớn hơn)

Mở rộng T Chuyển đổi ype có thể xảy ra nếu cả hai loại đều tương thích và loại đích lớn hơn loại nguồn. Mở rộng Truyền diễn ra khi hai loại tương thích với nhau loại mục tiêu lớn hơn loại nguồn .

Ví dụ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);
   }
}

Đầu ra

Giá trị byte
byte value : 40
short value : 40
int value : 40
long value : 40
float value : 40.0
double value : 40.0

Mở rộng truyền kiểu lớp

Trong ví dụ dưới đây, Con lớp là loại nhỏ hơn mà chúng tôi đang gán nó cho Parent loại lớp là loại lớn hơn do đó không cần truyền.

Ví dụ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();
   }
}

Đầu ra

Parent class display() method called

Truyền thu hẹp (loại lớn hơn đến nhỏ hơn)

Khi chúng tôi chỉ định một loại lớn hơn cho một loại nhỏ hơn, Truyền rõ ràng là bắt buộc.

Ví dụ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);
   }
}

Đầu ra

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


Thu hẹp Loại Lớp

Khi chúng tôi chỉ định loại lớn hơn cho một loại nhỏ hơn, thì chúng ta cần phải rõ ràng typecast nó.

Ví dụ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();
   }
}

Đầu ra

Child class display() method called