一、继承、接口与多态的相关问题:
1、 继承的作用?好处?坏处?
继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。
优点:a因为大部分是继承而来的,实现代码重用,减少代码书写量;
b很容易修改和扩展已有的实现
缺点:a打破了封装,因为基类向子类暴露了实现细节
b白盒重用,因为基类的内部细节通常对子类是可见的
c当父类的实现改变时可能要相应的对子类做出改变
d不能在运行时改变由父类继承来的实现
2、 接口的好处?坏处?
优点:帮助Java语言实现一个类似于多继承的功能.但是实现的多继承功能不会使代码中的类之间出现网状关系,而是比较清楚的树状关系,类似于家谱的感觉。
缺点:如果向一个java接口加入一个新的方法时,所有实现这个接口的类都得编写具体的实现。
3、 多态的作用?好处?坏处?
作用:简单的说就是一个接口,多种实现;继承的表现就是多态(没有继承就没有多态。)
a应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。
b派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
优点:a可替换性(可以替换一存在的代码);
b可扩充性(增加新的子类不影响原有类的特性);
c接口性;
d灵活性;
e简化性
缺点:a“遮盖”私有方法。只有非private的方法才能够被笼罩,尽管编译器不会报错,然而也不会遵照我们所渴望的来实行。在导出类中,对于基类中的private方法,优秀采纳不同的名字。
b域在转型时候的问题。对于成员变量(域),导出类将占有从基类承袭而来的成员变量和自己的成员变量(变量名字相一同也是如此),况且,将分摊不同的存储空间,这么,导出类将具有两个名目一样的域。为了取得基类的域,务须实际地著名super.field能力走访,而默许的域则是导出类自己的域。
c静态计策是与类相关系的,而非与某个对象相干联的,那么它就不拥有多态行动。
4、 什么是重载?什么是重写?
重载:
a方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
b Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
c重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
重写:
a父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
b若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
c子类函数的访问修饰权限不能少于父类的;
5、 什么是组合?
组合: a通过创建一个由其他对象组合的对象来获得新功能的重用方法
b新功能的获得是通过调用组合对象的功能实现的
c有时又叫聚合
优点:a被包含对象通过包含他们的类来访问
b黑盒重用,因为被包含对象的内部细节是不可见的
c很好的封装
d每个类专注于一个任务
e通过获得和被包含对象的类型相同的对象引用,可以在运行时动态定义组合的方式
缺点:a结果系统可能会包含更多的对象
b为了使组合时可以使用不同的对象,必须小心的定义接口
二、面向对象设计的六大原则:
1)Open-Close Principle(OCP),开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。这是最重要也是最为抽象的原则,基本上我们所说的Reusable Software既是基于此原则而开发的。其他的原则也是对它的实现提供了路径。
2)Liskov Substituition Principle(LSP),里氏代换原则,很严格的原则,规则是“子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类;
3)Dependence Inversion Principle(DIP),依赖倒换原则,“设计要依赖于抽象而不是具体化”。换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需 要哪些哪些类,因为这些是具体。这样做有什么好处呢?人的思维本身实际上就是很抽象的,我们分析问题的时候不是一下子就考虑到细节,而是很抽象的将整个问题都构思
出来,所以面向抽象设计是符合人的思维的。另外这个原则会很好的支持OCP,面向抽象的设计使我们能够不必太多依赖于实现,这样扩展就成为了可能,这个原则也是另 一篇文章《Design byContract》的基石。
4)Interface Segregation Principle(ISP),接口隔离原则,“将大的接口打散成多个小接口”,这样做的好处很明显。
5)Composition/Aggregation Reuse Principle(CARP),合成/聚合复用原则,设计者首先应当考虑复合/聚合,而不是继承(因为它很直观,第一印象就是“哦,这个就是OO 啊”)。这个就是所谓的“Favor Composition over Inheritance”,在实践中复合/聚合会带来比继承更大的利益,所以要优先考虑。
6)Law of Demeter or Least Knowlegde Principle(LoD or LKP),迪米特法则或最少知识原则,这个原则首次在Demeter系统中得到 正式运用,所以定义为迪米特法则。它讲 的是“一个对象应当尽可能少的去了解其他对象”。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。
一、继承、接口与多态的相关问题:
1、 继承的作用?好处?坏处?
继承:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继程java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。
优点:a因为大部分是继承而来的,实现代码重用,减少代码书写量;
b很容易修改和扩展已有的实现
缺点:a打破了封装,因为基类向子类暴露了实现细节
b白盒重用,因为基类的内部细节通常对子类是可见的
c当父类的实现改变时可能要相应的对子类做出改变
d不能在运行时改变由父类继承来的实现
2、 接口的好处?坏处?
优点:帮助Java语言实现一个类似于多继承的功能.但是实现的多继承功能不会使代码中的类之间出现网状关系,而是比较清楚的树状关系,类似于家谱的感觉。
缺点:如果向一个java接口加入一个新的方法时,所有实现这个接口的类都得编写具体的实现。
3、 多态的作用?好处?坏处?
作用:简单的说就是一个接口,多种实现;继承的表现就是多态(没有继承就没有多态。)
a应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。
b派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
优点:a可替换性(可以替换一存在的代码);
b可扩充性(增加新的子类不影响原有类的特性);
c接口性;
d灵活性;
e简化性
缺点:a“遮盖”私有方法。只有非private的方法才能够被笼罩,尽管编译器不会报错,然而也不会遵照我们所渴望的来实行。在导出类中,对于基类中的private方法,优秀采纳不同的名字。
b域在转型时候的问题。对于成员变量(域),导出类将占有从基类承袭而来的成员变量和自己的成员变量(变量名字相一同也是如此),况且,将分摊不同的存储空间,这么,导出类将具有两个名目一样的域。为了取得基类的域,务须实际地著名super.field能力走访,而默许的域则是导出类自己的域。
c静态计策是与类相关系的,而非与某个对象相干联的,那么它就不拥有多态行动。
4、 什么是重载?什么是重写?
重载:
a方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
b Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
c重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
重写:
a父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
b若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
c子类函数的访问修饰权限不能少于父类的;
5、 什么是组合?
组合: a通过创建一个由其他对象组合的对象来获得新功能的重用方法
b新功能的获得是通过调用组合对象的功能实现的
c有时又叫聚合
优点:a被包含对象通过包含他们的类来访问
b黑盒重用,因为被包含对象的内部细节是不可见的
c很好的封装
d每个类专注于一个任务
e通过获得和被包含对象的类型相同的对象引用,可以在运行时动态定义组合的方式
缺点:a结果系统可能会包含更多的对象
b为了使组合时可以使用不同的对象,必须小心的定义接口
二、面向对象设计的六大原则:
1)Open-Close Principle(OCP),开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。这是最重要也是最为抽象的原则,基本上我们所说的Reusable Software既是基于此原则而开发的。其他的原则也是对它的实现提供了路径。
2)Liskov Substituition Principle(LSP),里氏代换原则,很严格的原则,规则是“子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类;
3)Dependence Inversion Principle(DIP),依赖倒换原则,“设计要依赖于抽象而不是具体化”。换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需 要哪些哪些类,因为这些是具体。这样做有什么好处呢?人的思维本身实际上就是很抽象的,我们分析问题的时候不是一下子就考虑到细节,而是很抽象的将整个问题都构思
出来,所以面向抽象设计是符合人的思维的。另外这个原则会很好的支持OCP,面向抽象的设计使我们能够不必太多依赖于实现,这样扩展就成为了可能,这个原则也是另 一篇文章《Design byContract》的基石。
4)Interface Segregation Principle(ISP),接口隔离原则,“将大的接口打散成多个小接口”,这样做的好处很明显。
5)Composition/Aggregation Reuse Principle(CARP),合成/聚合复用原则,设计者首先应当考虑复合/聚合,而不是继承(因为它很直观,第一印象就是“哦,这个就是OO 啊”)。这个就是所谓的“Favor Composition over Inheritance”,在实践中复合/聚合会带来比继承更大的利益,所以要优先考虑。
6)Law of Demeter or Least Knowlegde Principle(LoD or LKP),迪米特法则或最少知识原则,这个原则首次在Demeter系统中得到 正式运用,所以定义为迪米特法则。它讲 的是“一个对象应当尽可能少的去了解其他对象”。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。
分享到:
相关推荐
详解java接口、继承和多态
掌握类的继承、方法重写、super关键字的使用、final关键字、抽象类和接口、多态的使用以及异常的处理方式 熟悉面向对象继承和多态的概念
java 实验 继承与多态rectAngle 定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;派生子类正方形类,定义一个接口Printable源代码
1、实验名称:类的继承、多态的应用 2、代码内容:学生管理类 3、【实验目的】 (1)进一步熟悉抽象类和抽象方法的定义 (2) 进一步掌握集成和多态的实现方式。
集合+接口+继承+多态,集合+接口+继承+多态
3-3 演示:示例 7 接口 接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点 使用interface关键字定义接口 一般使用接口声明方法或常量,接口中的方法只能是声明,...
实现重载(overload)和重写(override) 调用中用到多态,向上转换,强制转换 所有被创建的类,都各自创建两个实现接口 最底层的类中创建内部类,并在外部类中调用内部类的方法
c#多态,继承,接口,结构例子
西南科技大学Java程序设计与实践 实验三 类的继承与多态的应用 一、实验目的: 1、练习类的继承与多态设计过程; 2、练习面向对象的图形用户界面设计、事件设计方法。 二、实验内容: 1、利用多态性编程,创建一个 ...
想学习java的,继承和多态是非常重要的,一篇学校资料供大家参考
第3章 类的封装、继承和多态 第4章 接口、内部类和Java API基础 第5章 异常处理 第6章 图形用户界面 第7章 多线程 第8章 Applet应用程序 第9章 输入/输出流和文件操作 第10章 网络通信 第11章 数据库应用 第12章 ...
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象...Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。
定义一个台球类Billiards,继承Ball类,包含一个私有成员变量——颜色(String color),两个公有成员方法:设定颜色方法setColor()、输出信息方法show(),其中show()方法可以输出该台球的颜色和半径值。。。。。。
java程序设计_第5章_继承、多态、重载与接口
本文主要介绍了Java中的封装、继承、多态的相关知识,具有一定的参考价值,下面跟着小编一起来看下吧
主要介绍了java用接口、多态、继承、类计算三角形和矩形周长及面积的方法,涉及java面向对象中类、接口、多态等的使用技巧,需要的朋友可以参考下
封装,继承,多态,抽象,接口【Java一周入门教程6】
【完整课程列表】 ... 01 java概述(2学时)(共27页) 02 Java编程基础(4学时)(共55页) 03 数组(2学时)(共22页) 04 类和对象(2学时)(共31页) 05 继承和多态(2学时)...14 补充--对多态、抽象和接口的理解(共24页)
面向对象三大特征之多态 input可以根据不同的"type"(条件)产生不同形态 生活中的多态 一件事物根据不同的环境条件,产生不同的结果/形态 例如: H2O根据不同的温度条件,产生不同形态 -在标准大气压...
定义Daughter类继承Mother类,并增加一些属性(爱好)和方法(看动画片)。定义一个类UseExtends,在该类的main方法中创建一个名为daughter的对象,使用Mother类和Daughter类的属性和方法进行测试。 (3)定义一个...