- ----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 

一、java面向对象的特性。封装、继承、多态

       

封装

封装是对象和类概念的主要特性。

封装。也就是把客观事物封装成抽象的类。而且类能够把自己的数据和方法仅仅让可信的类或者对象操作,对不可信的进行信息隐藏。

继承

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它能够使用现有类的全部功能。并在无需又一次编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。

要实现继承,能够通过“继承”(Inheritance)和“组合”(Composition)来实现。在某些 OOP 语言中。一个子类能够继承多个基类。可是普通情况下,一个子类仅仅能有一个基类,要实现多重继承。能够通过多级继承来实现。

继承概念的实现方式有三类:实现继承、接口继承和可视继承。

实现继承是指使用基类的属性和方法而无需额外编码的能力;

接口继承是指仅使用属性和方法的名称、可是子类必须提供实现的能力;

可视继承是指子窗口(类)使用基窗口(类)的外观和实现代码的能力。

在考虑使用继承时,有一点须要注意,那就是两个类之间的关系应该是“属于”关系。比如,Employee 是一个人,Manager 也是一个人,因此这两个类都能够继承 Person 类。可是 Leg 类却不能继承 Person 类,由于腿并非一个人。

抽象类仅定义将由子类创建的一般属性和方法。OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

多态

多态性(polymorphism)是同意你将父对象设置成为和一个或很多其它的他的子对象相等的技术,赋值之后,父对象就能够依据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:同意将子类类型的指针赋值给父类类型的指针。

实现多态。有二种方式。覆盖,重载。

覆盖(override),是指子类又一次定义父类的虚函数的做法。

重载(overload),是指同意存在多个同名函数,而这些函数的參数表不同(也许參数个数不同,也许參数类型不同,也许两者都不同)。

事实上,重载的概念并不属于“面向对象编程”,重载的实现是:编译器依据函数不同的參数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这种)。

比方有两个同名函数:functionfunc(p:integer):integer;和functionfunc(p:string):integer;。

那么编译器做过修饰后的函数名称可能是这种:int_func、str_func。对于这两个函数的调用。在编译器间就已经确定了,是静态的(记住:是静态)。也就是说。它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类又一次定义了父类的虚函数后。父类指针依据赋给它的不同的子类指针,动态(记住:是动态!

)的调用属于子类的该函数,这种函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。

因此,这种函数地址是在执行期绑定的(晚邦定)。结论就是:重载仅仅是一种语言特性,与多态无关,与面向对象也无关!

关于多态 “不要犯傻。假设它不是晚绑定,它就不是多态。

”

那么,多态的作用是什么呢?我们知道。封装能够隐藏实现细节,使得代码模块化;继承能够扩展已存在的代码模块(类)。它们的目的都是为了——代码重用。而多态则是为了实现还有一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

二、详细用一个实例来表明

public class BasicInfo {

       private String name;

       private int age;



       public String getName() {

              return name;

       }



       public void setName(String name) {

              this.name = name;

       }



       public int getAge() {

              return age;

       }



       public void setAge(int age) {

              this.age = age;

       }



       public BasicInfo() {

              super();

              name = "张三";

              age = 18;

       }



       public BasicInfo(String name, intage) {

              super();

              this.name = name;

              this.age = age;

       }



       @Override

       public String toString() {

              return "BasicInfo[name=" + name + ", age=" + age + "]";

       }

      

}



//Student类从BasicInfo类继承而来,构造函数相同具有多态性,并对属性school进行了封装

public     class Student extendsBasicInfo{

              private String school;



              public String getSchool() {

                     return school;

              }



              public void setSchool(Stringschool) {

                     this.school = school;

                    

              }



              public Student(Stringschool) {

                     super();

                     this.school = school;

              }



              public Student() {

                     super();

                     school ="英国克莱登大学";

              }



              public Student(String name,int age) {

                     super(name, age);

                     school ="英国克莱登大学";

              }



              @Override

              public String toString() {

                     return "Student[school=" + school +",name="+getName()+",age="+getAge()+"]";

              }

             

       }

对于以上提供的两个类,一个基本信息类。实现事实上信息类中属性的封装及多态性,一个学生类实现对基本信息类的继承以及自有属性的封装,更好解释它的特性。

黑马程序猿——JAVA面向对象的特性:封装,继承,多态的更多相关文章

  1. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  2. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  3. 黑马程序猿————Java基础日常笔记---反射与正則表達式

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...

  4. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  5. java面向对象三大特性之继承

    通过重用已经测试并验证通过的代码,怎样才减少开发工作,所有开发团队都在为一问题而努力.一个久经考验的方法是通过有效地使用Java继承优化应用程序开发. 继承的从某种意义上讲,继承的短暂美就如同宇宙中所 ...

  6. 黑马程序员——OC语言 三大特性之继承

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之继承 (一)继承的基本用法 先建立个Animal再用Dog继承前 ...

  7. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

  8. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  9. 黑马程序猿——JAVA基础——集合

    ----------android培训.java培训.java学习型技术博客.期待与您交流.------------  一.关于java中的集合类        首先看一下,大致的框架流程图     ...

随机推荐

  1. jsp出现错误can not find the tag directory /web-inf/tags

    百度google了一大圈没找到中文答案,无奈之下硬着头皮看了一个英文答案http://stackoverflow.com/questions/11502703/eclipse-can-not-find ...

  2. MDNS的漏洞报告——mdns的最大问题是允许广域网的mdns单播查询,这会暴露设备信息,或者被利用用于dns放大攻击

    Vulnerability Note VU#550620 Multicast DNS (mDNS) implementations may respond to unicast queries ori ...

  3. sqoop配置安装以及导入

    安装sqoop的前提是已经具备java和hadoop的环境 1.上传并解压 (要导mysql的数据)得加入mysql的jdbc驱动包 接下来验证启动 Sqoop的数据导入 “导入工具”导入单个表从RD ...

  4. AES简单加密解密的方法实现

    package com.mstf.aes; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyEx ...

  5. 一般处理程序cookie和session+末尾的多选框,下拉框

    登录页面<body><form action="Login.ashx" method="post"><input type=&qu ...

  6. T_SQL 日期函数

    日期函数基数表达式的日期和时间或者是从时间间隔中返回值. GETDATE(),返回当前系统的日期和时间.例: SELECT GETDATE();  结果为:2010-05-18 15:53:08.92 ...

  7. FlatternMap和Map的区别

    flattenMap使用步骤:     1.传入一个block,block类型是返回值RACStream,参数value     2.参数value就是源信号的内容,拿到源信号的内容做处理     3 ...

  8. POJ 3539 Elevator(同余类BFS)

    题意 有一部电梯,最初停在1层. 电梯有4个按键,上升a,b,c层,回到一层. 求从一层出发.能到达1~h的哪些楼层. (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一 ...

  9. HDU 4939 Stupid Tower Defense 简单DP

    题意: 地图为长为n个单位长度的直线,每通过一个单位长度需要t秒. 有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后格子造成y点伤害,蓝塔可以使通过单位长度的时间增加z秒. 让你安排塔的排 ...

  10. 百度IOT

    万物互联 http://www.jianshu.com/p/3d9846bf42bd 百度天工