如何在android Java中使用子类(继承)
Posted
技术标签:
【中文标题】如何在android Java中使用子类(继承)【英文标题】:How to use child class in android Java (inheritance) 【发布时间】:2021-04-16 02:40:32 【问题描述】:我对编码还很陌生,请帮助我了解如何在带有 Java 的 android 中使用继承。让我用一个例子来解释我的问题:
就像有一个名为“Animal”的父类,它包括“name”和“age”,并有两个子类“Dog”和“Cat”。 “Dog”类有“name”、“age”、“food”,“Cat”类有“name”、“age”、“breed”作为属性。
据我了解,最佳做法是:
-
具有“name”、“age”属性的动物类+构造函数和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;
-
Dog 类扩展了 Animal 类的属性为“food”并放置了 getter 和 setter
private String food;
public String getFood()
return food;
public void setFood(String food)
this.food = food;
-
Cat 类扩展了 Animal 类的属性为“breed”并放置了 getter 和 setter
private String breed;
public String getBreed()
return breed;
public void setBreed(String breed)
this.breed = breed;
-
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);
现在既然有三个类,每个类都有不同的属性,那么如何在Mainactivity中实现listview来显示所有动物及其食物或品种的列表(取决于它们有哪一种)?
非常感谢您提前回答
【问题讨论】:
欢迎堆栈溢出。请阅读this 以获取有关您的问题的帮助。就您目前的问题而言,它的重点不是很集中-您在问各种不同的问题,但到目前为止还没有展示您尝试过的内容 如何为继承类创建表请参考以下链接sqlteam.com/articles/… 感谢您的建议@a_local_nobody,我确实修改了问题 【参考方案1】:您的问题是指继承,但也涉及多态性。
创建超类和子类
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
的多态性和继承概念。
列表是动物。属于超类类型。
dog
也是 animal
,cat
也是 animal
(通过继承),因此您可以将它们添加到 Animal
列表中。
如果你想引用一个特定的对象(比如示例代码中的 Cat),你必须使用 'instance of' 操作符进行 Casting。
有关更多信息,您可以阅读有关 Inheritance
和 Polymorphism
的信息。
【讨论】:
谢谢@h.mozrahi,这是一个非常有帮助的解释【参考方案2】:你可以这样做或类似这样。
型号:
动物:
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());
【讨论】:
【参考方案3】:你问的是多态性。这意味着子类继承了它的超类的所有内容。
为了实现你想要的,你会创建你的对象,比如:
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());
【讨论】:
以上是关于如何在android Java中使用子类(继承)的主要内容,如果未能解决你的问题,请参考以下文章