继承、接口与多态的相关问题

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为了使组合时可以使用不同的对象,必须小心的定义接口

原文发布于微信公众号 - java一日一条(mjx_java)

原文发表时间:2016-01-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

数组和链表的区别

数组: 数组是将元素在内存中连续存放,由于每个元素占用内存 相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内...

27970
来自专栏老司机的技术博客

宝宝都能学会的python编程教程12:函数的参数

Python的函数定义非常简单,也非常灵活。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还...

37060
来自专栏积累沉淀

Python快速学习第四天

第四天: 条件 、循环和其他语句 1、    print 使用逗号输出 - 打印多个表达式也是可行的,但要用逗号隔开 >>> print 'tanggao ',...

205100
来自专栏老九学堂

最新Java高薪面试题+答案+解析!

今天老九君给大家分享一些Java面试需要的题目哟~ 01 anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类,是否可以im...

46970
来自专栏Albert陈凯

scala 隐式详解(implicit关键字)

掌握implicit的用法是阅读Spark源码的基础,也是学习Scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用...

33690
来自专栏我和我大前端的故事

深入了解原型

说原型之前先说说对象,好像在工作中,对象用的挺多的,原型基本上没有用。既然没有用那我还要不要学习呢?思考了很久,还是学一学,万一以后的工作用的着呢?领导常说,上...

10030
来自专栏猿人谷

C++重要知识点小结---1

1.C++中类与结构的唯一区别是:类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。 2....

20690
来自专栏每日一篇技术文章

Java_数据类型_03

先从一个话题开始,有人说java语言具有较高的安全性和健壮性,以及夸平台的特点,大家有没有思考过为什么? 那我就围绕这个话题展开讨论。 数据类型

8500
来自专栏idba

Python内置函数介绍

一 前言 在编写Python 程序或者工具脚本时,需要完成某个功能,可以选择编写一个具体的函数达到目的,当然也可以通过匿名/Python 内建函数来完成。本...

7920
来自专栏CodeSheep的技术分享

Java编程思想学习录(连载之:初始化与清理)

21180

扫码关注云+社区

领取腾讯云代金券