So sánh kiểu với Instanceof trong java

Toán tử instanceof trong java được sử dụng để kiểm tra một object có phải là thể hiện của một kiểu dữ liệu cụ thể không (class, subclass, interface).

class Parent {  } 
class Child extends Parent { } 
  
class Test 
{ 
    public static void main(String[] args) 
    { 
        Child cobj = new Child(); 
  
        // A simple case 
        if (cobj instanceof Child) 
           System.out.println("cobj is instance of Child"); 
        else
           System.out.println("cobj is NOT instance of Child"); 
  
        // instanceof returns true for Parent class also  
        if (cobj instanceof Parent) 
           System.out.println("cobj is instance of Parent"); 
        else
           System.out.println("cobj is NOT instance of Parent"); 
  
        // instanceof returns true for all ancestors (Note : Object 
        // is ancestor of all classes in Java)  
        if (cobj instanceof Object) 
           System.out.println("cobj is instance of Object"); 
        else
           System.out.println("cobj is NOT instance of Object");            
    } 
}

Output

cobj is instance of Child
cobj is instance of Parent
cobj is instance of Object

instanceof null

Khi một biến được gán giá trị null thì instanceof luôn trả về false khi so sánh.
class Parent {  } 
class Child extends Parent { } 
  
class Test 
{ 
    public static void main(String[] args) 
    { 
        Parent pobj = new Parent(); 
        if (pobj instanceof Child) 
           System.out.println("pobj is instance of Child"); 
        else
           System.out.println("pobj is NOT instance of Child"); 
    } 
}

Output: pobj is NOT instance of Child

Instanceof với Upcasting

Một biến kiểu dữ liệu supperclass có thể tham chiếu đến một subclass object, trong trường hợp này java sẽ upcasting từ kiểu dữ liệu subclass lên supperclass, chúng ta không cần ép kiểu tường minh cho chúng.

class Parent {  } 
class Child extends Parent { } 
  
class Test 
{ 
    public static void main(String[] args) 
    { 
        // Reference is Parent type but object is 
        // of child type. 
        Parent cobj = new Child(); 
        if (cobj instanceof Child) 
           System.out.println("cobj is instance of Child"); 
        else
           System.out.println("cobj is NOT instance of Child"); 
    } 
}

Output: cobj is an instance of Child

Instanceof với Downcasting

Để tránh exception chúng ta cần sử dụng instanceof để kiểm tra trước thi downcasting.

Note: Sử dụng downcasting khi chúng ta cần sử dụng các tính chất riêng của subclass mà ở supperclass không có. 

class Parent {
}

class Child extends Parent {
    public void childMethod() {
        System.out.println("From child");
    }
}

class Child2 extends Parent {}

class Test {
    public static void main(String[] args) {

        test(new Child());
        test(new Child2());
    }

    public static void test(Parent parent) {
        if (parent instanceof Child) {
            System.out.println("OK");
            ((Child) parent).childMethod();
        } else {
            System.out.println("NO");
        }
    }

}

Output:

OK
From child
NO

Tài liệu tham khảo

https://www.javatpoint.com/downcasting-with-instanceof-operator

https://www.geeksforgeeks.org/java-instanceof-and-its-applications/

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x