父类实例化子类

最近在琢磨c#的时候,经常发现类似这样的例子:
public class people
{
//代码略
}
public class man : people
{
//代码略
}
public class Apply
{
people Person=new man();
...
}
我想问一下,在实际的编程中,会有这样的需要吗?请有经验的人说说看.

有这样的需要的,比如People类有一个Run方法,Man和Woman这两个类都是继承自People的类,并且都重写(override)了Run这个方法(男人女人跑起步来不一样).
现在有一群人一起跑步,有男人有女人.
我们可以把这些都装进一个People数组(假设为peoples).
然后
foreach(People p in peoples)
{
  p.Run();
}

由于多态性,在调用p.Run()的时候p对象本身如果是男人就会自动调用男人的Run方法,是女人就会调用女人的Run方法.
还有许多地方需要用到多态性的,建议你记住,以后遇到了自然就想通了.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 假设有一个父类Animal和两个子类Dog和Cat,可以通过以下代码示例使用父类实例化子类: ``` Animal animal1 = new Dog(); // 使用父类Animal实例化子类Dog Animal animal2 = new Cat(); // 使用父类Animal实例化子类Cat ``` 在上述代码中,我们使用Animal类来实例化Dog和Cat子类。由于Dog和Cat都是Animal的子类,因此可以使用Animal类型的变量来引用这些子类的实例。这种方式称为多态。 ### 回答2: 一个Java语言中用父类实例化子类的例子可以是: 假设有一个动物类Animal,有两个子类Cat和Dog,都继承自Animal类。在Animal类中定义了一个名为"animalSound()"的方法,该方法用于输出动物的叫声。在Cat类中重写了"animalSound()"方法,输出的是猫咪的叫声"Meow",而在Dog类中也重写了该方法,输出的是狗狗的叫声"Woof"。 ```java class Animal { public void animalSound() { System.out.println("动物发出叫声"); } } class Cat extends Animal { @Override public void animalSound() { System.out.println("猫咪发出叫声:Meow"); } } class Dog extends Animal { @Override public void animalSound() { System.out.println("狗狗发出叫声:Woof"); } } public class Main { public static void main(String[] args) { Animal animal1 = new Cat(); // 父类实例化子类 Animal animal2 = new Dog(); // 父类实例化子类 animal1.animalSound(); // 输出:猫咪发出叫声:Meow animal2.animalSound(); // 输出:狗狗发出叫声:Woof } } ``` 在这个例子中,通过Animal类来创建了一个Cat对象和一个Dog对象。尽管使用了父类Animal的类型来声明这两个对象,但实际上它们都是子类的实例。当调用animalSound()方法时,实际上会根据对象的实际类型来执行相应的方法。因此,animal1.animalSound()输出的是猫咪的叫声"Meow",而animal2.animalSound()输出的是狗狗的叫声"Woof"。这体现了多态性的概念,即可以使用父类的类型来引用子类对象,实现了代码的灵活性和可扩展性。 ### 回答3: Java语言中,通过使用父类实例化子类是一个多态性的例子。多态性是面向对象编程中的一种特性,使得一个变量可以以不同的方式引用不同的对象,实现了代码的灵活性和可扩展性。 比如,假设有一个父类Animal和它的两个子类Cat和Dog,它们都拥有独特的行为和特征。我们可以通过使用父类实例化子类的方式来体现多态性。 首先,我们定义一个Animal父类: ```java public class Animal { public void move() { System.out.println("动物可以移动"); } } ``` 然后,我们定义两个子类Cat和Dog,分别继承自Animal: ```java public class Cat extends Animal { @Override public void move() { System.out.println("猫可以走和跳"); } public void purr() { System.out.println("猫可以发出呜咪呜咪的声音"); } } public class Dog extends Animal { @Override public void move() { System.out.println("狗可以行走和奔跑"); } public void bark() { System.out.println("狗可以发出汪汪的声音"); } } ``` 最后,我们可以通过父类Animal来实例化子类Cat和Dog,并调用它们各自独有的方法: ```java public class Main { public static void main(String[] args) { Animal animal1 = new Cat(); Animal animal2 = new Dog(); animal1.move(); // 输出结果:猫可以走和跳 ((Cat) animal1).purr(); // 输出结果:猫可以发出呜咪呜咪的声音 animal2.move(); // 输出结果:狗可以行走和奔跑 ((Dog) animal2).bark(); // 输出结果:狗可以发出汪汪的声音 } } ``` 以上示例中,我们利用父类Animal实例化子类Cat和Dog的对象,并调用了它们各自特有的方法。这就是使用父类实例化子类的一个典型例子。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值