如何在androidJava中使用childclass(继承)
How to use child class in android Java (inheritance)
我对编码还很陌生,请帮助我了解如何在 android 和 Java 中使用继承。让我用一个例子来解释我的问题:
比如有一个叫“Animal”的parent class,它包括“name”和“age”,还有两个子classes“Dog”和“Cat”。 “狗”class 有“名字”、“年龄”、“食物”,“猫”class 有“名字”、“年龄”、“品种”作为它们的属性。
根据我的理解,最佳做法是:
- 动物 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;
}
}
- Dog class 扩展了 Animal class 的属性为“食物”,并放入 getter 和 setter
private String food;
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
}
- Cat class 扩展 Animal class 的属性为“品种”,并放置 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);
}
}
现在因为有三个 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' 运算符进行转换。
有关更多信息,您可以阅读 Inheritance
和 Polymorphism
。
你问的是多态性。这意味着子类继承了超类的所有内容。
要实现您想要的效果,您可以像这样创建对象:
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 中使用继承。让我用一个例子来解释我的问题:
比如有一个叫“Animal”的parent class,它包括“name”和“age”,还有两个子classes“Dog”和“Cat”。 “狗”class 有“名字”、“年龄”、“食物”,“猫”class 有“名字”、“年龄”、“品种”作为它们的属性。
根据我的理解,最佳做法是:
- 动物 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;
}
}
- Dog class 扩展了 Animal class 的属性为“食物”,并放入 getter 和 setter
private String food;
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
}
- Cat class 扩展 Animal class 的属性为“品种”,并放置 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);
}
}
现在因为有三个 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' 运算符进行转换。
有关更多信息,您可以阅读 Inheritance
和 Polymorphism
。
你问的是多态性。这意味着子类继承了超类的所有内容。
要实现您想要的效果,您可以像这样创建对象:
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());