面对对象多态的异常

可以提高代码的扩展性,比如你开的宝马,想换一个奔驰,我们需要建立一个奔驰的类和方法,需要新建一个宝马的类和方法,但是要是奔驰坏了我们要用宝马的话我们呢就要在重新弄一下宝马的,但是自从有了多态以后,我们只需要弄一个汽车的类就可以至于我们想开什么车,我们创建那个车的对象,然后直接调用方法就可以了,也就是只需要用一个代码就行,不用换一次车换一次代码了,这也是比较抽象的,希望大家可以理解,

在开发当中我们要面向抽象编程,不要面向具体变成,抽象就是我上面所说的只调用一个方法就可以换车,具体就是换一次车就要重新写一个需要换的车那个代码和方法,这样换的多了我们就会发现代码特别臃肿,特别乱,还占用很多空间内存,但是我们要是有多台就不用那么麻烦了,只需要创建一个那样的对象就可以了

  1. 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
  2. 多态的作用:消除类型之间的耦合关系。

多态存在的三个必要条件

  • 要有继承;
  • 要有重写;
  • 父类引用指向子类对象。

package dd20161114_2;
/**
父类pet
*/
public class Pet {
public void eat() {
System.out.println("吃饭");
}
}

package dd20161114_2;

public class Dog extends Pet {
public void eat() {
// TODO Auto-generated method stub
System.out.println("狗啃骨头");
this.hight=5;
}
}

package dd20161114_2;

public class Cat extends Pet{
public void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃鱼");
}
三个类,Dog和Cat分别继承了Pet类

package dd20161114_2;

public class Master1 {
public static void main(String[] args) {
//dog对象实例化
Dog dog=new Dog();
eat(dog);
//cat对象实例化
Cat cat=new Cat();
eat(cat);
//Pet对象实例化
Pet pet=new Dog();
pet=new Cat();
eat(pet);

}
public static void eat(Pet pet){

pet.eat();
}
}

输出结果:
狗啃骨头
猫吃鱼
猫吃鱼
从输出结果中可以看出,eat方法需要传递的参数为Pet的一个对象,但是当我传递它的子类的时候也可以,而且调用了相应的方法。我还可以通过实例化子类对象获得父类声明的对象,调用方法的时候它会自动去找对应子类的方法,这就是对象的向上转型和向下转型

向上转型

父类对象通过子类对象去实例化,实际上就是对象的向上转型。向上转型是不需要进行强制类型转换的,但是向上转型会丢失精度。

向下转型

所谓向下转型,也就是说父类的对象可以转换为子类对象,但是需要注意的是,这时则必须要进行强制的类型转换。

多态的好处

可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
子代父类实例化,然后就相当于一个父亲有很多儿子,送快递的给这个父亲的儿子送东西,他只需要送到父亲的家就行了,至于具体是那个儿子的,父亲还会分不清自己的儿子么,所以你就不用操心了。

使用多态是一种好习惯

多态方式声明是一种好的习惯。当我们创建的类,使用时,只用到它的超类或接口定义的方法时,我们可以将其索引声明为它的超类或接口类型。

它的好处是,如果某天我们对这个接口方法的实现方式变了,对这个接口又有一个新的实现类,我们的程序也需要使用最新的实现方式,此时只要将对象实现修改一下,索引无需变化。

比如Map< String,String> map = new HashMap < String,String>();想换成HashTable实现,可以Map< String,String> map = new HashTable < String,String>();

比如写一个方法,参数要求传递List类型,你就可以用List list = new ArrayList()中的list传递,但是你写成ArrayList list = new ArrayList()是传递不进去的。尽管方法处理时都一样。另外,方法还可以根据你传递的不同list(ArrayList或者LinkList)进行不同处理。

原文地址:https://www.cnblogs.com/JiXianSen/p/12142200.html

时间: 2024-10-20 11:48:38

面对对象多态的异常的相关文章

面对对象-多态

多态的有点:提高了代码的可扩展性和可维护性 在java中多态,继承和方法重写密不可分,在编译时经常将父类类型作为形参,在运行时将具体的子类作为实参,执行的子类重写后的方法. 多态的转型: 向上转型(自动转换:将子类转换成父类) 向下转型(强制转换:将父类转换成子类) 当利用父类创建子类时发生了向上转型1.上转型对象不能操作子类新增的成员变量和方法.2.上转型对象可以操作子类继承或重写的成员变量和方法3.如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法. instanceof

面对对象_面向对象的概念、类与对象的关系

面向对象的基本概念: 1.什么是面向对象 1.面向对象是一种编程思想 2.面向对象是一种思考问题的思维方式 2.建立面向对象的思维方式 1.先整体,再局部 2.先抽象,在具体 3.能做什么,再怎么做 3.如何学习面向对象 1.掌握一门面向对象语言的语法 2.熟悉面向对象的设计原则 3.熟悉面向对象的设计模式 面对对象的概述:   1.面对对象的三个特征(公认的):封装,继承,多态.(也可以说是四大特征:封装,继承,多态,抽象)   2.开发中先找对象,没有就建立一个对象,实际就是找对象,建立对象

js面对对象编程

说到js,很大一部分人会说我很熟悉,在日常的web开发中经常用,那么你的js代码是符合面对对象思路的吗?那你会问我面向过程的js代码有什么不好吗?我的感受是面对对象的js编码更加简洁,减少了混乱,可维护行增强,适合编写富客户端时应用. 好了,首先看看js里如何定义对象: <html> <head> <script type="text/javascript"> var obj=new Object(); obj.name='josh'; obj.ag

Day-8: 面对对象编程

面对过程的程序设计方法意在将函数分成子函数,再依次调用这些函数来解决问题. 而面对对象的程序设计方法,来源于自然界,类是实例的抽象,实例是类的具体.自定义出来的对象是类,而所有的数据都可以看成是对象,因此解决问题的方法是靠对象自己处理消息和相互传递消息.使用时,首先考虑的是需要创建什么样的对象,对象中有怎么样的属性,要实现什么功能(成为方法). 面向对象的抽象程度比函数要高,因为一个class中既包含数据,又包含操作数据的方法.其中,数据封装.继承和多态是面向对象的三大特点. 创建类时,clas

Java入门——(2)面对对象(上)

关键词:面对对象.类..构造方法.this.static.内部类 一.面对对象的概念:把解决的问题安装一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.其特点可概括为封装性.继承性.多态性. 1.封装性:面对对象的核心,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想. 2.继承性:主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展. 3.多态性:是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其他类

PHP面对对象总结

一个关于面对对象知识的问答总计:https://wenku.baidu.com/view/391eeec483c4bb4cf6ecd1ad.html 面对对象的三大特征: 1.封装 为了保护类封装了之后使用$thi->方法名来使用封装的方法或属性.相关知识链接:http://www.cnblogs.com/xishaonian/p/6146207.html 2.继承 子类继承父类的一切,特点:单继承(就是说一个子类只能继承一个父类,但是使用inface接口可以实现继承多个父类)方法重写:子类中的

面对对象基础

1.面对对象不是所有情形都适用 1.1函数式编程 def fun1(arg1): pass def fun2(arg1,arg2): pass fun1("acker") fun2("...") 2.1面对对象编程 class humanBeing: def fun1(self, arg1): pass def fun2(self,arg1, arg2): pass obj1 = humanBeing() obj1.fun1('wuwen') obj2.fun2('

python面对对象笔记整理

首先声明本文纯属笔记 1 面对对象三大特性: 1.1 封装:将字段封装在类中,通过类中self调用或者通过对象来调用. 1.2 继承:一般的继承不再叙述,多继承参考另一篇文章 python多继承 1.3 多态:因为python的函数可以传入多种类型的参数,所以不存在多态.python这种形式属于鸭子类型,也就是长得像鸭子的类型都可以. 2

面对对象总结

1. 基础概念:1.面向过程:认识事物和分析解决问题的方式,强调解决问题的流程化                          功能行为,缺点就是不能很好地适应需要的变化c/c++                        2.面向对象:认识事物的方式方法,全面认知事物(属性,方法),将有联系的功能打包放入一个对象里,基于面对过程                       3.面向接口编程:抽象对象身上的属性,方法.通过接口的实现类创建接口对象(contactdao cd=new co