精华内容
下载资源
问答
  • Java面向对象设计主要有三大特征:封装性、继承性和多态性封装性1.1 概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访问。1.2 目的:我们可以并且有可能在...

    Java面向对象设计主要有三大特征:封装性、继承性和多态性

    一  封装性

    1.1  概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访问。

    1.2  目的:我们可以并且有可能在方法中,添加自己的限制,保证数据的有效性;从某种程度上说,封装也提高了代码的健壮性、安全性。

    1.3  实现步骤:所有的成员变量全部私有化,格式 :private   数据类型  变量名  ,提供访问成员变量的getter/setter方法。

    二  继承性

    2.1  概念:子类通过一种方式来接受父类所有的公有的,受保护的成员变量和成员方法。

    2.2  目的:增强了代码的复用性,提高了代码的质量。

    2.3  实现步骤:使用extends关键词,标识子类继承父类 ,格式:public    class   子类名    extends   父类名

    2.4  注意事项:  ⑴子类可以在继承父类方法的基础上,重写父类的方法,在具体执行是执行子类的方法;

    ⑵子类可以定义自己的属性,方法,这是代码扩展性的一种体现;

    ⑶Java中所有的类,如果没有显示的定义继承自谁,默认都是从Object继承而来的;

    ⑷(特别注意)Java中,每个类都只能继承一个类————Java的单继承机制。

    三 多态性

    3.1  概念:程序在运行的过程中,同一种类型在不同的条件下表现不同的结果,这种不定状态的表现形式,可以称为多态。

    3.2  分类:ⅰ.设计时多态:方法重载实现的多态

    ⑴方法重载—————定义的所有方法都是声明在【同一个类】中的;

    ⑵方法重载的实现————相同的方法名称(不同的参数){},例如:public void   person(){ . . . }

    和public void person(String name){ ........}

    ⅱ .运行时多态:方法【重写】实现的多态

    ⑴方法重写/覆盖————定义的方法肯定是在子类中覆盖父类的方法,方法出现在两个类中。

    ⑵方法重写的实现————子类继承父类,然后在子类中重新定衣服类方法的实现。

    例如:父类 public class  Pet{}

    子类 public class Cat{}   子类继承父类 Cat  extends  Pet

    Pet   cat  =  new Cat(); 父类的引用指向子类的对象,表示运行时多态。

    展开全文
  • 封装封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变...提高软件的可重用;降低了大型系统的风险,即便整个系统不成功,个别独立的子系统有可能还有价值。封装的原则又是什么呢,现在我们在这说下封装...

    封装

    封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。

    封装的优点: 便于使用者正确、方便的使用系统,防止使用者错误修改系统属性;

    有助于建立各个系统之间的松耦合关系;提高软件的可重用性;

    降低了大型系统的风险,即便整个系统不成功,个别独立的子系统有可能还有价值。

    封装的原则又是什么呢,现在我们在这说下封装的两大原则: 把尽可能多的东西藏起来,对外提供简洁的接口;

    把所有的属性封装起来。

    继承

    子类继承父类的属性和行为,并能根据自己的需求扩展出新的属性和行为,提高了代码的可复用性。

    Java中使用extends关键字实现,实现继承的类我们叫子类,被继承的叫父类(有的也称其为基类、超类)。子类可以拓展父类的属性,子类也可以获取父类中所有的属性和方法。

    多态

    多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

    多态有哪些具体实现方式呢,具体实现就是,接口的实现接口实现,继承父类进行方法重写,同一个类中进行方法重载。

    多态存在的的三个必要条件: 要有继承(两个类之间存在继承关系,子类继承父类);

    要有重写(在子类里面重写从父类继承下来的方法);

    父类引用指向子类对象;

    这三个条件一旦满足,当你调用父类里面被重写的方法的时候,实际当中new的是哪个子类对象,就调用子类对象的方法(这个方法是从父类继承下来后重写后的方法)。

    多态的优势: 有助于解耦:提高了代码的可扩展性,大大提高了代码的灵活性,简化了一些不必要的逻辑处理,从而提高代码的维护率,提高代码的实用性。

    可替换性:多态对已存在代码具有可替换性。

    可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

    接口性:多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

    灵活性:它在应用中体现了灵活多样的操作,提高了使用效率。

    简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

    展开全文
  • 子类和父类的关系三、多态性1.多态性的理解2.何为多态性3.多态的使用4.向下转型5.instanceof关键字 一、封装封装性就是将对象内部的复杂性隐藏起来,只是对外部公开简单的接口,便于外界调用,从而提高系统的可...


    一、封装性

    封装性就是将对象内部的复杂性隐藏起来,只是对外部公开简单的接口,便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,就是把该隐藏的隐藏起来,该暴露的暴露出来。

    1.针对属性的封装性

    将类的属性设为私有的(private),并提供set或者get方法。此时,针对属性就体现了封装性。

    2.针对方法的封装性

    不对外暴露的私有方法

    3.权限修饰符的大小关系

    private < 缺省 < protected < public

    4.具体的权限范围

    在这里插入图片描述

    二、继承性

    1.继承性的好处

    ①、减少了代码的冗余,提高了代码的复用性
    ②、便于功能的扩展
    ③、为多态性的使用提供了前提

    2.子类和父类的关系

    ①、一旦子类A继承了父类B以后,子类A中就获取了父类B中声明的所有属性和方法(特别的:父类中声明为private的属性或者方法,子类继承父类以后,仍然认为子类继承了父类中的私有结构,只是因为封装性的影响,使得子类不能直接调用父类的私有结果。)
    ②、子类继承父类以后,还可以声明自己特有的属性或者方法,用来实现功能的拓展。
    ③、格式:class A extends B

    注意点:

    ①、一个类可以被多个类继承。
    ②、一个类只能有一个父类。
    ③、子类直接继承的父类为:直接父类、 间接继承的父类:间接父类(理解为爷爷类)。

    三、多态性

    1.多态性的理解

    一个事物的多种形态

    2.何为多态性

    父类的引用指向子类的对象。
    举例:

    Person p = new Man();
    

    这对Man来说也叫做向上转型

    3.多态的使用

    虚拟方法调用:有了对象的多态性之后,我们在编译期,只能调用父类中声明的方法,但是在运行期,我们实际执行的是子类重写父类的方法。(多态对属性不管用)

    4.向下转型

    有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。如何才能调用子类特的属性和方法?使用向下转型。
    向下转型后,就可以使用子类特有的方法和属性了。

    5.instanceof关键字

    在向下转型的过程中,有可能会出现 ClassCastException 的异常,所以在转型之前,使用 instanceof来对该类进行判断。
    举例:

    if(a instanceof A){// 判断对象a是否是类A的实例,如果是返回true 否则返回 false
    A a = (A)a;//将对象a转为类A的对象
    } 
    

    展开全文
  • 0. 前言第二阶段作业相对于第一次作业来讲难度加大了,自学内容也增多了,对java的涉及面也扩展了,主要对正则表达式、类的继承和多态有了较的学习。1. 作业过程总结NO:1总结三次作业之间的知识迭代关系:第四次...

    0. 前言

    第二阶段作业相对于第一次作业来讲难度加大了,自学内容也增多了,对java的涉及面也扩展了,主要对正则表达式、类的继承和多态有了较多的学习。

    1. 作业过程总结

    NO:1总结三次作业之间的知识迭代关系:

    第四次作业知识上用到了类的组合和继承,第五次作业有对多态的要求,第六次作业有使用到多态和List的一系列操作方法,逐步地将面向对象的三大特征都慢慢强化。

    NO:2如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性:

    在前一阶段的学习中我们知道:在类中定义了自己的私有属性和方法,规范属性的范围,体现了面向对象的特征:封装性;而在这个阶段的练习中有较多的类继承关系的运用,像父子类的继承关系、抽象类的子类要全都实现父类定义的方法、子类重写父类的方法等等;而在第二阶段第三次作业中体现了三大特性之一的多态,多态体现了同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

    NO:3    作业过程中遇到的问题及解决方法:

    第四次作业共有三题,难度递减:

    第一题水文校验难度对我来说特别大,要使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算。由于第一次接触正则表达式,自学了一个下午的日期检验正则表达式的运用,了解了对日期格式的合法校验,但是这样远远还不够,由于C语言没有学好,所以这道题的的输入令我十分头疼,读题解题都花了我不少时间,样例真的可以把我直接劝退,在断断续续写了一段时间加一个通宵后,第一次提交运行测试点一个没过就打算放弃了。

    第二题使用蒙特卡洛仿真方法求圆周率,一开始不晓得题目什么意思,去网上百度了百度上又说的那么复杂,磨蹭了点时间在解题上,后来读懂了题运行时出现了空指针错误,在类之间的调用和传值上面花了时间去排查,百思不得其解,还尝试着用面向过程的方法试着提交了几次,但都只过了几个测试点,后来改来改去发现自己的随机数产生的方法有问题,因为题目给的坐标条件有点特殊,不能盲目的看网上给的公式,最后用面向对象试着提交居然过了。

    最后一题是实现图形类的继承,并定义相应类对象,这个如果要说的话就是在设计主函数的时候忘了调用set语句方法传值,导致后面运行输出的时候显示相同的值,能够出现这样的错误只能说自己的代码道路还很长很长。。。

    总的来说这次作业凭着水文校验成功的在这阶段作业里面晋级难度五颗星,只有后面两道题得分。

    第五次作业有两道题,难度递增:

    第一题要掌握类的继承、多态性及其使用方法,通过常见的图形来进行计算面积、面积大小排序和求各图形的面积之和;当时在看指导书时对里面的这样句话纠结了不少时间——“根据图形的面积大小进行升序排序,要求必须对 list 中的图形对象在 list 中进行排序,而不是对求得的面积进行排序,排序后再次求出各图形的面积并输出。”后来在排序的时候发现前面那句话对测试点木有影响,想到怎么排序就怎么来;第一次运行后发现我的不同属性的面积值都是最后一个属性计算得到的面积,开始我以为是传值的时候后面的值覆盖掉了前面的值,后面又以为是输出有问题,最后我发现我被指导书上的“要求创建的各个图形对象均存储在 ArrayList类型的列表中。”给坑了,当时把图形面积用list.add都放在ArrayList类型的列表中再排序,后来发现可以直接用三个普通数组存放各个图形的面积值,再用System.arraycopy将三个数组合并,最后用Arrays.sort方法进行排序就完全ok。

    第二题的多项式求导就没有这么简单了,开始花了一个通宵把我认为的框架搭好,后面运行出来的结果只有匹配错误的测试点能过通过,而正确表达式求导的三个测试点还是过不了。

    第六次作业有两道题和一道加分题,前两道题是相互关联的:

    第一题是图形卡片排序游戏,要掌握类的继承、多态性使用方法以及接口的应用。这道题开始做的时候看了指导书上的类图,发现他把问题想得太复杂了,为了过测试点还是立马果断抛弃了,直接上手自己的思路,当然了自己的思路偏向面向过程,但它并不妨碍我得出正确答案;这道题在排序上踩了坑,一开始受了第四次作业的图形排序影响,直接用Collections.sort排,发现他是按照整个字符串的大小排序,而不是按照字符串里面的面积排,所以我又自学了Collections.sort方法的重写,将面积前面的图形名称字符串用空格代替再次排序,又发现还是按数字字符串排序而不是按浮点数的大小排序,最后改了重写方法将数字字符串强制转换成浮点数类型再比较大小就ok了。

    第二题是在第一题的基础上对不同图形分类进行排序,用到了arraylist和string的相互转换,和字符串的一系列操作。

    加分的第三题求素数的练习,考查算法设计与优化有点意思了,用普通的方法来测试只能通过数值小的,而对于七位数的是没有输出的,第一次提交的时候发现运行超时,在改的过程中还出现了答案错误的情况,最后我在网上学习了“无尽算法之计数质数(厄拉多塞筛法)”才解决了这个超时运行的问题。

    NO:4 每次作业花费的时间比例:

    5:4:2

    NO:5    对编程过程的严谨性的认识及教训:

    我觉得在学习过程中要有自己的设计思路,不要一味的按照指导书上给的方案来思考,别人的方案不一定适合自己,但还是要尽量多使用面向对象的设计思路和方法,使用封装性、继承性与多态性三大技术特性让自己的代码得到更多的复用。

    2.OO设计心得

    ①对面向对象三大技术特性之间关系的理解:

    我觉得可以用一句话来概括:封装和继承目的都是为了代码重用,而多态目的是为了接口重用。

    细细通俗地来讲封装就是类可以把自己的属性和方法藏起来,不容易让外界改变自己的值;

    继承就是子类包含父类的属性和方法,不重复编码便可以使用他们,但是子类又不仅限于父类,他可以派生出自己特有的属性和方法,用高中数学解题思路可以解释继承的过程是一个“从一般到特殊的的过程”;

    而实现多态有两种方法:重载和重写,目前的作业用到了重写方法(override)

    Collections.sort(l);//对Comparator进行自定义重写:对字符串“Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02 ”里面的浮点数进行排序——“Circle:98.52 Triangle:4.02 Rectangle:3.22 Trapezoid:1.14 ”

    Collections.sort(l, new Comparator() {

    @Override

    public int compare(Object o1, Object o2) {

    return new Double(((String) o2).replaceAll("[A-Za-z:]", "")).compareTo(new Double(((String) o1).replaceAll("[A-Za-z:]", "")));

    }

    });

    ②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

    面向对象有五大原则:单一职责、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则现在来总结下前两个原则,其实对于我来讲老师给我们强调的最多的是单一职责(Single responsibility principle),简单来说他就是☞

    一个类应该只有一个引起它变化的原因。即每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。

    而我对于开闭原则的理解还不是特别深:

    开闭原则(OCP)是面向对象设计中“可复用设计”的基石,开闭原则告诉我们应尽量通过扩展软件实体的行为来实现变化,而不是通过修改现有代码来完成变化,它是为软件实体的未来事件而制定的对现行开发设计进行约束的一个原则。

    ③类设计心得

    通过画类图对类进行设计,先理清楚各个小问题之间的关系,再设计的类与类之间的关系,是依赖、继承、实现、关联、聚合还是组合。

    3.测试的理解与实践

    ①测试对于编码质量的重要性

    通过测试员对一个写好的代码进行边界测试,可以知道代码实现的功能和不足的地方。

    ②查阅资料,假设使用Junit进行程序的测试是否可行

    使用Junit进行程序的测试是可行的。

    4.课程收获

    总结这四周来在OO方面的教训及收获

    教训:我觉得还是要对面向对象的思路进行强化,很多地方一不小心就按照面向过程的设计方法去写代码了,以前学c语言的时候不好好学面向过程,现在要用面向对象去设计了又喜欢用面向过程解决问题。

    收获:经过对这一阶段的作业训练、课堂作业的考察以及老师上课灌输的知识,让我逐渐体会到对面向对象的继承,多态还有代码的复用性等思想的巧妙。

    5.对课程的建议

    ①第三阶段作业难度、题量的建议

    希望老师能够考虑到编程菜鸟的解题速度,尽量在输入形式上不做强制要求,类图画的能够简单实用些。

    ②课程内容讲解方面的建议

    老师课上能够结合具体实例来向我们讲解面向对象的各种思路和特性,是特别好的一件事,但作为一枚菜鸟更希望老师能够多细致地讲一下每次的作业,毕竟不是所有同学都能够全部实现测试点。。而且为了尽快完成作业通过测试点,很多地方没有考虑用面向对象的思路解决问题,这对于我们以后用oo解决问题很不利。

    来源:https://www.icode9.com/content-4-685151.html

    展开全文
  • Java多态性理解

    2021-02-12 19:42:18
    什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息...
  • 面向对象基本特征类的...类的多态性多态性是指相同方法名的若干方法,具有不同的实现方式(即方法体不同)。多态性有两种表现形式(1)方法重载(overloading):又称为静态多态性,即同一类中可以有多个同名方法,但是...
  • Javascript基于对象的三大特征和C++,Java面向对象的三大特征一样,都是封装(encapsulation)、继承(inheritance )和多态(polymorphism )。只不过实现的方式不同,其基本概念是...一、封装性 封装就是把抽象出来的...
  • 方法重载:静态多态性,方法同名,但参数个数不同,或者是参数类型不同,或者是参数顺序不同。 方法覆盖:动态多态性,子类对父类方法的重新定义,但其方法名,返回值和参数形态完全一样。 父类对象指向子类对象:...
  • Java多态性是什么?

    2021-02-28 18:31:40
    继承是为了重用父类代码,同时为实现多态性作准备。那么什么是多态呢?方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来...
  • 面向对象编程有三大特性:封装、继承、多态。封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。继承是...
  • 多态性面向对象(OOP)三大特性:封装、继承、多态。多态性(polymorphism)指同一行为具有多种不同表现形式,在面向对象程序设计中表现为同一消息可以根据发送对象的类型不同,做出多种不同的行为。多态性的优点多态性...
  • Java中多态性的实现什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。多态的定义:指允许不同类的对象对同一消息...
  • 通过简单的一道题目帮大家理解java多态性,具有一定的参考价值,感兴趣的小伙伴们可以参考一下什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一...
  • 封装性(encapsulation):封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立很强的模块,使得用户只能见到对象的外特性(对象能...
  • 面向对象的三大特征:封装性、继承性、多态性。继承继承是多态的前提 ,如果没有继承,就没有多态。继承主要解决的问题就是:共性抽取。继承关系当中的特点:子类可以拥有父类的“内容”子类还可以拥有自己的专有的...
  • C++基础:什么是C++的多态性

    千次阅读 2020-12-28 18:50:10
    多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义...
  • Java中多态性的实现

    2021-02-12 17:53:33
    Java中多态性的实现什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。多态的定义:指允许不同类的对象对同一消息...
  • 深入浅析java 中的多态性发布时间:2020-11-10 15:34...Java中多态性的实现什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要...
  • 和Java语言的封装性和继承性相比,多态性显得更加重要,而且不易掌握。多态作为面向对象(OO)中的核心机制之一拥有着丰富的内涵。多态性(PolymorPhism)一词来源于拉丁语Poly(表示多的意思)和morphos(意为形态),顾名思义...
  • 实验八:多态性

    2021-06-09 13:23:39
    实验八:多态性一、 实验目的:二、实验环境:三、实验原理:四、实验内容:五、实验代码及结果(程序运行结果请以截屏图给出):六、实验小结: 一、 实验目的: 1、了解多态性的概念; 2、掌握运算符重载的基本方法...
  • 1-相关对象的多态性是通过继承实现的,不相关对象的多态性是根据接口实现的; 2-实例设计 一个简单工厂工资的实例 1)分为5个单元和1个窗体 5个单元分别为:UntPerson;UntBoss;UntEmployee;UntPieceWorker; ...
  • 封装的目的是增强安全和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。例如,在抽象的基础上,我们可以将时钟的数据和功能封装起来,构成一个时钟类。按c++的...
  • Java中实现多态性的方法有哪些发布时间:2020-12-05 16:13:13来源:亿速云阅读:53作者:Leah本篇文章为大家展示了Java中实现多态性的方法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的...
  • 7-6 实现图形接口及多态性 (30 分) ** 编写程序,使用接口及类实现多态性,类图结构如下所示: 其中: GetArea为一个接口,无属性,只有一个GetArea(求面积)的抽象方法; Circle及Rectangle分别为圆类及矩形类,...
  • java - 多态性的好处

    2021-03-14 16:58:12
    java - 多态性的好处当我开始寻找多态性的好处时,我在这里找到了这个问题。 但在这里我无法找到答案。 让我告诉我想找到什么。 这里我有一些课程:class CoolingMachines{public void startMachine(){//No ...
  • 一、多态概述(Polymorphism)1、引入多态是继封装、继承之后,面向对象的第三大特性。可以理解为一个事物的多种形态。通过不同的事物,体现出来的不同的形态。多态,描述的就是这样的状态。如跑的动作,每个动物的跑...
  • javascript 多态性

    2021-03-28 15:06:20
    //多态 ...//把可变的部分封装起来 //*** 把做什么和谁去做分开 对象与操作分离 */ //java的多态是通过向上转型 //js的多态是与生俱来的 //*** 消除分支语句,每个对象只负责自己的行为*/ // const m.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,231
精华内容 33,692
关键字:

多态性封装