文章目录
- Java 面向对象编程实践:动物和狗的类继承与多态
- 1. Animal类
- 2. Dog类
- 3. 测试类
- test_Animal_01
- test_Animal_02
- test_Animal_03
- test_Animal_05
- test_Animal_06
Java 面向对象编程实践:动物和狗的类继承与多态
在这篇文章中,我们将通过一个简单的例子来探讨Java中的面向对象编程(OOP)概念,包括类继承、抽象类、多态以及构造函数的使用。我们将创建一个抽象的Animal
类,然后创建一个继承自Animal
的Dog
类,并在不同的测试类中实例化Dog
类的对象。
1. Animal类
Animal
类是一个抽象类,它定义了动物的基本属性和行为。由于它是抽象的,我们不能直接实例化这个类,但可以迫使子类实现我们声明的抽象方法。
// 定义一个抽象类Animal,表示动物的基类
public abstract class Animal {protected String name; // 动物的名字private int age; // 动物的年龄public final String COLOR = "黑色"; // 动物的颜色,默认为黑色// 无参构造函数public Animal() {}// 带参数的构造函数,用于初始化动物的名字和年龄public Animal(String name, int age) {this.name = name;this.age = age;}// 返回动物的信息public String info() {return "名字:" + getName() + ", 年龄:" + getAge();}// 设置动物的名字public void setName(String name) {this.name = name;}// 设置动物的年龄public void setAge(int age) {this.age = age;}// 获取动物的名字public String getName() {return name;}// 获取动物的年龄public int getAge() {return age;}// 抽象方法,子类需要实现动物的叫声public abstract void shout();
}
2. Dog类
Dog
类继承自Animal
类,并实现了shout
方法,这是多态的一个例子。Dog
类还添加了额外的属性color
。
// 定义一个Dog类,继承自Animal类
class Dog extends Animal {private String color; // 狗的颜色// 带参数的构造函数,用于初始化狗的名字、年龄和颜色public Dog(String name, int age, String color) {super(name, age); // 调用父类的构造函数this.color = color;}// 无参构造函数public Dog() {super();}// 设置狗的颜色public void setColor(String color) {this.color = color;}// 获取狗的颜色public String getColor() {return color;}// 重写父类的shout方法,实现狗的叫声@Overridepublic void shout() {System.out.println("小狗汪汪汪!");}// 打印狗的名字public void printName() {System.out.println("名字:" + getName());}// 重写父类的info方法,添加狗的颜色信息public String info() {return super.info() + ", 颜色:" + getColor();}
}
3. 测试类
我们将创建几个测试类来演示如何使用Dog
类。
test_Animal_01
class test_Animal_01 {public static void main(String[] args) {// 创建一个Dog对象,并初始化名字、年龄和颜色Dog dog = new Dog("dog1", 4, "蓝色");// 打印狗的名字、年龄和颜色System.out.println("名字:" + dog.getName() + ",年龄:" + dog.getAge() + ",颜色:" + dog.getColor());// 调用shout方法,输出狗的叫声dog.shout();}
}
输出:
名字:dog1,年龄:4,颜色:蓝色
小狗汪汪汪!
test_Animal_02
class test_Animal_02 {public static void main(String[] args) {// 创建一个Dog对象,并初始化名字、年龄和颜色Dog dog = new Dog("dog1", 4, "蓝色");// 调用shout方法,输出狗的叫声dog.shout();}
}
输出:
小狗汪汪汪!
test_Animal_03
class test_Animal_03 {public static void main(String[] args) {// 创建一个Dog对象,并初始化名字、年龄和颜色Dog dog = new Dog("dog1", 4, "蓝色");// 调用shout方法,输出狗的叫声dog.shout();// 修改狗的名字dog.setName("一只小狗汪汪汪!!!");// 打印修改后的狗的名字dog.printName();}
}
输出:
小狗汪汪汪!
名字:一只小狗汪汪汪!!!
test_Animal_05
class test_Animal_05 {public static void main(String[] args) {// 声明一个final字符串变量,但没有输出final String name = "狗儿~";}
}
这个类没有输出,因为它只声明了一个final
字符串变量。
test_Animal_06
public class test_Animal_06 {public static void main(String[] args) {// 创建一个Dog对象,但没有初始化名字和年龄Dog dog = new Dog();// 调用shout方法,输出狗的叫声dog.shout();}
}
输出:
小狗汪汪汪!
这个类创建了一个Dog
对象,但是没有设置名字和年龄,所以shout
方法只是简单地输出了"小狗汪汪汪!"。