关于java类和对象之多态的心得理解

一.多态,从字面理解上是多种形态,具体来说就是当不同对象去实现某个相同的动作时,会产生不同的结果或状态!!!

  如何理解上述语句呢,例如,动物都需要吃饭,而猫吃饭可能吃的是猫粮,狗吃饭吃的可能是狗粮,同样是吃饭,在不同对象上产生了不同的形态,

二.多态的实现条件

1.必须在继承体系下
2.子类必须要对父类中方法进行重写
3.通过父类的引用调用重写的方法
多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。

public class Animal { String name;
int age;

public Animal(String name, int age){ this.name = name;
this.age = age;
}

public void eat(){ System.out.println(name + "吃饭");
   }
}

public class Cat extends Animal{ public Cat(String name, int age){
super(name, age);
}

@Override public void eat(){
System.out.println(name+"吃鱼~~~");
   }
}

public class Dog extends Animal { public Dog(String name, int age){
super(name, age);
}

@Override public void eat(){
System.out.println(name+"吃骨头~~~");
   }
}
public class TestAnimal {
// 编译器在编译代码时,并不知道要调用Dog 还是 Cat 中eat的方法
// 等程序运行起来后,形参a引用的具体对象确定后,才知道调用那个方法
// 注意:此处的形参类型必须时父类类型才可以
public static void eat(Animal a){
   a.eat();
}

public static void main(String[] args) { 
Cat cat = new Cat("元宝",2);
Dog dog = new Dog("小七", 1);

eat(cat);
eat(dog);
   }
}

上述代码的运行结果为

运行结果:

元宝吃鱼~~~

小七吃骨头~~~

 从这段代码可以看出,1.猫狗都是动物的子类   2.且猫和狗两种子类都对eat方法进行重写            3.猫和狗两种类都通过父类引用调用了已经重写的eat方法

当类的调用者在编写 这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并不知道, 也不关注当前的a 引用指向的是哪个类型(哪个子类)的实例. 此时 a这个引用调用 eat方法可能会有多种不同的表现(a 引用的实例相关), 这种行为就称为 多态.

三.总结:

多态的优点:1.提高代码的复用率,避免过多判断对象以致于出现太多if else语句,降低圈复杂度,简化代码。                                                                                                                                                      2.可扩展能力更强如果要新增一种新的形态, 使用多态的方式代码改动成本也比较低.多态的缺点:代码的运算效率降低,

提醒:

1.属性没有多态性

2.避免在构造方法中调用重写的代码(构造方法没有多态性),用尽量简单的方式使对象进入可工作状态", 尽量不要在构造器中调用方法(如果这个方法被子类重写, 就会触发动态绑定, 但是此时子类对象还没构造完成), 可能会出现一些隐藏的但是又极难发现的问题.

四.最后:

多态是一种思想与手段,是继承与重写组合起来可以实现的东西,合理利用多态,避免多态的缺点,可以使自己的代码更上一层楼

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值