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

                                       - ----------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()+"]";

}

}

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

时间: 06-03

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

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

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

Java面向对象三大特性 封装 继承 多态

1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类把自己该做的事情封装起来,而不是暴露给其他类去处理,当内部的逻辑发生变化时,外部调用不用因此而修改,他们只调用开放的接口,而不用去关心内部的实现 举例: public class Human { private int age; private String name; public int get

黑马程序员——JAVA面向对象的特性:封装,继承,多态

                                       - ----------android培训.java培训.java学习型技术博客.期待与您交流!------------  一.java面向对象的特性,封装.继承.多态         封装 封装是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 继承 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是

面向对象三大特性(封装/继承/多态)

引入:在面向对象思想中,有三大特性,封装  继承  多态. 思考:我们在使用类和对象实现编程的时候,到底是遵循这什么样的逻辑呢?为什么要这样规范类呢? 引入:面向对象很重要的思想就是隐藏,即外部不知道类内部是如何实现业务逻辑的,只管调用和使用结果,这个就是面向对象三大特性之一:  封装 1.封装[掌握] 定义:封装,字面意思就是将内容装到某个容器中,并进行密封保存,在面向对象思想中,封装指数据和对数据的操作捆绑到一起,形成 对外界的隐藏,同时对外提供可以操作的接口. 1.数据:即要操作的数据,在

[黑马程序员]Objective-C 面向对象三大特性之继承

基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). 比如我们前文(Objective-C 面向对象三大特性之多态)中提到的Animal和Dog类: #import <Foundation/Foundation.h> @interface Animal : NSObject -(void) eat; @end @implementation Animal -(void)

面向对象三大特性:封装,继承,多态(一,封装和继承)

封装.继承和多态是面向对象程序设计的三个核心特性. 封装是面向对象技术中的一个重要概念,是一种信息隐藏技术,它体现了面向对象程序设计的思想. 继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,育雏利用已有的类来完成更复杂.更深入的程序开发. 多态允许以一种统一的风格处理已存在的变量和相关的类,多态性使得向系统增加功能变的容易. 一.封装 封装的含义是:类的设计者把类设计成一个黑匣子,使用者只能看见类中定义的公共变量和公共方法,而看不见方法的具体实现细节,

面向对象三大特性:封装,继承,多态(二、多态)

多态 一,多态的概念 多态(polymorphism), 是指一个名字可以有多种语义.在面向对象语言中,多态是指在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法.通常有两种途径实现多态:方法的重载和覆盖. 多态性允许以统一的风格处理已存在的变量及相关的类.多态性使得向系统里增加新功能变得容易.继承性和多态性是降低软件复杂性有有效技术. 二,多态的实现 1.方法的重载 方法重载时: 参数必须不同.参数个数不同或类型不同. 返回值可以相同,也可以不同. 重载的价值在于它允许通过使用一个

Java面向对象一(封装 继承 多态 类 对象 方法)

1.封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 如下,人这个类封装了很多人的属性和行为: 2.继承:很好的实现了代码的复用,提高了编程效率. 人{ 年龄(属性一) 身高(属性二) 性别(属性三) 做事(行为之一) 走路(行为之二) 说话(行为之三)} 教师{ 年龄(属性一) 身高(属性二) 性别(属性三) 做事(行为之一) 走路(行为之二) 说话(行为之三) 教书(行为之四)} 教师继承了人的属性和行为,额外多出的是教书的行为.所以可以写成 教师 继承了 人这个类 的

面向对象三大特性:封装,继承,多态(三、多态的进一步讲解)

多态(polymoph)指的是“执行期间(而非编译期间)”判断所引用对象的实际类型.,根据其实际的类型调用其相应的方法. 多态也叫动态绑定,也叫迟绑定. 多态的存在有三个必要条件: 要有继承 要有重写 父类引用指向子类对象