2013-07-22 45 views
6

Tôi mới với java và có 2 câu hỏi về đoạn mã sau:Java: Lấy lớp con từ một danh sách lớp cha

class Animal { } 
class Dog extends Animal { } 
class Cat extends Animal { } 
class Rat extends Animal { } 

class Main { 
    List<Animal> animals = new ArrayList<Animal>(); 

    public void main(String[] args) { 
    animals.add(new Dog()); 
    animals.add(new Rat()); 
    animals.add(new Dog()); 
    animals.add(new Cat()); 
    animals.add(new Rat()); 
    animals.add(new Cat()); 

    List<Animal> cats = getCertainAnimals(/*some parameter specifying that i want only the cat instances*/); 
    } 
} 

1) Có cách nào để có được một trong hai con chó hoặc mèo hợp từ Aminal list? 2) Nếu có, tôi nên xây dựng phương thức getCertainAnimals như thế nào?

+1

Sử dụng toán tử instanceof http://www.javapractices.com/topic/TopicAction.do?Id=31. – kosa

+1

sử dụng instanceOf(), để có được loại của một lớp :) – Satya

Trả lời

4
Animal a = animals.get(i); 

if (a instanceof Cat) 
{ 
    Cat c = (Cat) a; 
} 
else if (a instanceof Dog) 
{ 
    Dog d = (Dog) a; 
} 

NB: Nó sẽ biên dịch nếu bạn không sử dụng instanceof, nhưng nó cũng sẽ cho phép bạn để cast a-Cat hoặc Dog, ngay cả khi a là một Rat. Mặc dù biên dịch, bạn sẽ nhận được ClassCastException khi chạy. Vì vậy, hãy đảm bảo bạn sử dụng instanceof.

+1

Cảm ơn, nó đã giúp tôi rất nhiều! – user2605421

+1

Không sao cả. Chào mừng bạn đến với SO. Bạn nên đi theo [tour] (http://stackoverflow.com/about). –

2

Bạn có thể làm một cái gì đó như sau

List<Animal> animalList = new ArrayList<Animal>(); 
    animalList.add(new Dog()); 
    animalList.add(new Cat()); 
    for(Animal animal : animalList) { 
     if(animal instanceof Dog) { 
      System.out.println("Animal is a Dog"); 
     } 
     else if(animal instanceof Cat) {; 
      System.out.println("Animal is a Cat"); 
     } 
     else { 
      System.out.println("Not a known animal." + animal.getClass() + " must extend class Animal"); 
     } 
    } 

Bạn cũng có thể kiểm tra các lớp của động vật và so sánh nó với các lớp động vật phụ. Như trong

for(Animal animal : animalList) { 
    if(animal.getClass().equals(Dog.class)) { 
     System.out.println("Animal is a Dog"); 
    } 
    else if(animal.getClass().equals(Cat.class)) {; 
     System.out.println("Animal is a Cat"); 
    } 
    else { 
     System.out.println("Not a known animal." + animal.getClass() + " must extend class Animal"); 
    } 
} 

Trong cả hai trường hợp, bạn sẽ nhận được kết quả đầu ra như

Animal is a Dog 
Animal is a Cat 

Về cơ bản cả hai làm điều tương tự. Chỉ để cung cấp cho bạn sự hiểu biết tốt hơn.

Các vấn đề liên quan