编写一个包含3个类以上的Java程序,要求用到成员变量的隐藏、方法的重写和上转型对象
时间: 2024-12-04 20:25:46 浏览: 0
在Java中,可以创建一个多态示例,其中包含父类Animal,两个派生类Dog和Cat,并涉及成员变量的隐藏、方法的重写以及上转型对象的概念。这里是一个简化的例子:
```java
// 定义一个隐藏成员变量的父类
class Animal {
protected String name; // 隐藏的名字属性,仅在Animal内部可见
public Animal(String name) {
this.name = name;
}
// 父类的方法
public void speak() {
System.out.println("This is an animal.");
}
}
// 派生类Dog,重写了speak方法
class Dog extends Animal {
private String breed;
// 重写父类speak方法
@Override
public void speak() {
System.out.println("Woof! I'm a " + breed + " dog.");
}
// 具体构造函数
public Dog(String name, String breed) {
super(name); // 调用父类构造器
this.breed = breed;
}
}
// 另一派生类Cat,同样重写了speak方法
class Cat extends Animal {
private String color;
// 重写父类speak方法
@Override
public void speak() {
System.out.println("Meow! I'm a " + color + " cat.");
}
// 具体构造函数
public Cat(String name, String color) {
super(name);
this.color = color;
}
}
// 主函数,演示上转型
public class Main {
public static void main(String[] args) {
Animal myPet; // 上转型对象
// 创建具体的派生类实例并赋值给上转型变量
myPet = new Dog("Rex", "German Shepherd");
myPet.speak(); // 输出Dog的声音
myPet = new Cat("Whiskers", "Siamese");
myPet.speak(); // 输出Cat的声音
}
}
```
在这个例子中:
1. `name`在`Animal`中被声明为protected,所以`Dog`和`Cat`可以直接访问它,而其他类则需要权限才能访问。
2. `Dog`和`Cat`都重写了`speak()`方法,实现了多态,可以根据实际引用的对象类型输出不同的信息。
3. 在`main`函数中,我们通过`Animal`类型的引用`myPet`来分别指向`Dog`和`Cat`对象,这展示了上转型的概念。
阅读全文