父类引用指向子类对象
来源:互联网 发布:华为交换机mac过滤 编辑:程序博客网 时间:2024/06/05 09:09
多态是面向对象的一个非常重要的特征。而多态有三个必要条件是
1.要有继承(实现implements)
2.要有重写(overwrite & override)
3.父类引用指向子类对象( 例子[ Animal a =new Dog(); ])
这篇博客说的就是父类引用指向子类对象。
翻译过来就是定义一个父类的引用,但指向的是子类的对象。
我写了一个父类引用指向子类的小例子
这是父类Animal
class Animal //定义父类Animal { private String type = "Animal"; public virtual void showLegs() { Console.WriteLine("This is an {0} , Animal always has legs", type); } }
下面分别是子类Dog和子类Glede
class Dog:Animal//子类Dog继承父类Animal { private String type = "Dog"; public override void showLegs() { Console.WriteLine("This is a {0} , Dog has four legs", type); } }
class Glede : Animal//子类Glede继承父类Animal { private String type = "Glede"; public override void showLegs() { Console.WriteLine("This is a {0} , Glede has two legs", type); } }
客户端的代码是这样的
Animal a1 = new Animal(); Animal a2 = new Dog(); //定义一个Animal的引用指向的是子类的Dog对象 Animal a3 = new Glede(); //定义一个Animal的引用指向的是子类的Glede对象 a1.showLegs(); a2.showLegs(); a3.showLegs(); Console.ReadLine();
从内存上说 假设类Animal的内存是x,类Dog占用的内存是y.
那么a1所分配内存就是x+y,而a2所分配内存就是y。
内存上减少了。
父类引用指向子类对象还有一个好处就是为以后修改方便,那么以后用到Animal的地方,用dog实例,cat实例都可以取代,不用改实例名了。说玄乎一点,也就体现了面向对象“多态”的特性。
我称这种编程为‘’可持续性编程‘’。
0 0
- 父类引用指向子类对象
- 子类引用指向父类对象???
- 父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 关于父类引用指向子类对象
- 父类的引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 浅谈父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- 父类引用指向子类对象
- spring的context:property-placeholder属性
- 如何使用Guava的缓存管理
- (精)软件架构设计
- Java-泛型编程-使用通配符? extends 和 ? super
- chromium flash player issue
- 父类引用指向子类对象
- error MSB6006: "cmd.exe" exited with code 3 错误的解决方法
- 正则校验
- 2014年感想总结
- fuelphp资料
- ondraw() 和dispatchdraw()的区别
- dom4j生成的doc转换为string时,不生成头信息
- 看图说话-Java并发实践-1
- 数据库访问数据块的方式