如何在androidJava中使用childclass(继承)

How to use child class in android Java (inheritance)

我对编码还很陌生,请帮助我了解如何在 android 和 Java 中使用继承。让我用一个例子来解释我的问题:

比如有一个叫“Animal”的parent class,它包括“name”和“age”,还有两个子classes“Dog”和“Cat”。 “狗”class 有“名字”、“年龄”、“食物”,“猫”class 有“名字”、“年龄”、“品种”作为它们的属性。

根据我的理解,最佳做法是:

  1. 动物 class 属性为“姓名”、“年龄”+构造函数和 getter 和 setter

public class Animal{
    private String name;
    private int age;

    public Animal() {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

  1. Dog class 扩展了 Animal class 的属性为“食物”,并放入 getter 和 setter
   private String food;
   

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }
}
  1. Cat class 扩展 Animal class 的属性为“品种”,并放置 getter 和 setter
    private String breed;


    public String getBreed() {
        return breed;
    }

    public void setBreed(String breed) {
        this.breed = breed;
    }
}

  1. MainActivity 应该是这样的

public class MainActivity extends AppCompatActivity {

    ArrayList<Animal> mAnimal = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Dog dog = new Dog();
        dog.setName("The Dog");
        dog.setAge(2);
        dog.setFood("Bone");

        Cat cat = new Cat();
        cat.setName("The Cat");
        cat.setAge(1);
        cat.setBreed("Persian");

        mAnimal.add(dog);
        mAnimal.add(cat);

       
    }

}

现在因为有三个 class 并且每个 class 都有不同的属性,如何实现列表视图来显示所有动物及其食物或品种的列表(取决于它们是哪一个有)在 Mainactivity 中?

非常感谢您的提前回答

您可以这样做或类似这样。

型号:

动物:

public class Animal {

Dog dog;
Cat cat;

public Animal(Dog dog, Cat cat) {
    this.dog = dog;
    this.cat = cat;
}

public Animal() {
}

public Dog getDog() {
    return dog;
}

public void setDog(Dog dog) {
    this.dog = dog;
}

public Cat getCat() {
    return cat;
}

public void setCat(Cat cat) {
    this.cat = cat;
}

狗:

public class Dog {
String name;
String age;
String food;

public Dog(String name, String age, String food) {
    this.name = name;
    this.age = age;
    this.food = food;
}

public String getFood() {
    return food;
}

public void setFood(String food) {
    this.food = food;
}

猫:

public class Cat {
String name;
String age;
String breed;

public Cat(String name, String age, String breed) {
    this.name = name;
    this.age = age;
    this.breed = breed;
}

public String getBreed() {
    return breed;
}

public void setBreed(String breed) {
    this.breed = breed;
}

MainActivity.java:

public class TestActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    Animal animal = new Animal();
    animal.setDog(new Dog("tomi", "6","Roti"));

    List<Animal> animals = new ArrayList<>();
    animals.add(animal);

    Log.d("Jay", animals.toString());
}

您的问题涉及继承,但也涉及多态性。

创建超级 class 和子 classes

class Animal {
  protected String name;
  protected int age;

 public void animalSound() {
    System.out.print("The animal makes a sound");
  }
}

class Cat extends Animal {

  private boolean isLivesAtHome;

//getters & setters

//override function from super class
  public void animalSound() {
    System.out.print("The Cat says meow");
  }
}

class Dog extends Animal {
private boolean isWasVaccinatedAgainstRabies;

//getters & setters

//override function from super class
  public void animalSound() {
    System.out.print("The dog says bow wow");
  }
}

运行 这个在 Main 函数上是这样的:

class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();  // Create a Animal object - Super Class
    Animal myCat = new Cat();  // Create a Cat object
    Animal myDog = new Dog();  // Create a Dog object

        ArrayList<Animal> arr = new ArrayList<>();
        arr.add(myCat);
        arr.add(myDog);
        arr.add(myAnimal);

        //simple for loop
        for (int i = 0; i < arr.size(); i++){

            //if the object is a Cat instance
            if(arr.get(i) instanceof Cat){

                //change Cat instance variable
                ((Cat)arr.get(i)).setLivesAtHome(true);

                System.out.println("I'm a Cat");
            }

            //print animalSound function
            arr.get(i).animalSound();
        }
  }
}

此代码打印的:

I'm a Cat
The Cat says meow
The dog says bow wow
The animal makes a sound

此示例使用单个 ArrayList.

显示多态性和继承概念

列表是动物。属于超级 Class 类型。

一个dog也是一个animal,一个cat也是一个animal(通过继承)所以你可以将它们添加到Animal列表.

如果要引用特定对象(如示例代码中的 Cat),则必须使用 'instance of' 运算符进行转换。

有关更多信息,您可以阅读 InheritancePolymorphism

你问的是多态性。这意味着子类继承了超类的所有内容。

要实现您想要的效果,您可以像这样创建对象:

Animal dog = new Dog();
((Dog) dog).setBreed("Terrier"); //This is called Casting
...
Animal cat = new Cat();
...

然后在您的 ListView 中显示数据时,您可以检查您的对象是否是特定对象的实例,如下所示:

if(dog instanceof Dog)
   textView.setText(((Dog) dog).getBreed());