面向对象的三大特征——封装、继承、多态

接触过面向对象的人都知道面向对象有三大特征,分别是封装、继承和多态。这三者分别指的是什么,为什么是这哥仨,使用他们有什么好处,我们来梳理一下。

封装

原则:隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:

①将变化隔离。

②便于使用。

③提高重用性。

④提高安全性。

Demo1:

比如一个学生类:他具有姓名和年龄两个属性,但是为了提高安全性和重用性,便于使用,我们将其封装起来。

public class Student {
         private String name;
         private int age;
         public Student() {
                   super();
                   //TODO Auto-generated constructor stub
         }
         public Student(String name, int age) {
                   super();
                   this.name= name;
                   this.age= age;
         }
         public String getName() {
                   returnname;
         }
         public void setName(String name) {
                   this.name= name;
         }
         public int getAge() {
                   returnage;
         }
         public void setAge(int age) {
                   this.age= age;
         }
         @Override
         public String toString() {
                   return"Student [name=" + name + ", age=" + age + "]";
         }
}

其中,类的成员变量都用private修饰,提高安全性。

继承

概述

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

父类又称基类,超类;子类又称派生类。

子类可以直接访问父类中的非私有的属性和行为。

关键字为 extends

好处

提高了代码的复用性。

让类与类之间产生了关系,提供了多态的前提。

特点

a.Java只支持单继承,不支持多继承。

因为如果可以多继承,就会出现调用不明确的问题。

b.Java支持多重继承(继承体系)

什么时候用

如果多个类之间有is  a 的关系时候,可以定义为继承。

定义类(A,B)的时候:

A  is a B 中A是子类。

B  is a A 中B是子类

注意:不要为了去继承部分功能,而去使用继承。

Demo2:

class animal
{
         private String name;
         private int age;

         public void setName()
         {
                   this.name=name;
         }
         public String getName()
         {
                   returnname;
         }
         public void setAge()
         {
                   this.age=age;
         }
         public int getAge()
         {
                   returnage;
         }

         public void run()
         {
                   System.out.println("跑步");
         }
         public void eat()
         {
                   System.out.println("吃饭");
         }
}
class dog extends animal
{
         publicvoid eat()
         {
                   System.out.println("狗吃骨头!");
         }
}

class car extends animal
{
         public void eat()
         {
                   System.out.println("猫吃鱼!");
         }
}
class AnimalTest
{
         public static void main(String[] args)
         {
                   dog d = new dog();
                   d.eat();
                   d.run();
                   car c = new car();
                   c.eat();
                   c.run();
         }
}

运行结果:

狗吃骨头!

跑步

猫吃鱼!

跑步

多态

概述:在同一个方法中,由于参数不同而导致执行效果各异的现象就是多态。

拿生活中的例子来说:

水(水,冰,水蒸气)

狗:狗是狗,狗是动物,狗是宠物,狗是食物

前提条件:

A:要有继承关系。

B:要有方法重写。

C:要有父类引用指向子类对象。

多态间的成员特点:方法有重写,而变量没有

成员变量

编译看左边,运行看左边。

成员方法

编译看左边,运行看右边。

注意:多态有三种体现形式

类多态

抽象类多态

接口多态

优点:

提高代码的扩展性和可维护性。

弊端:

父类引用不能使用子类特有功能。

基本类型:隐式转换(小到大),强制转换(大到小)。

引用类型:向上转型(小到大),向下转型(大到小)。

Demo3:

class Animal
{
   public void sing()
    {
       System.out.println("动物在唱歌!");
    }
}
class Dog extends Animal
{
   public void sing()
    {
       System.out.println("狗在唱歌!");
    }
}
class Cat extends Animal
{
   public void sing()
    {
       System.out.println("猫在唱歌!");
    }
   public void eat()
    {
       System.out.println("猫在吃饭!");
    }
}

public class PolyTest
{
   public static void main(String[] args)
    {

       //向上类型转换
       Cat cat = new Cat();
       Animal animal = cat;
       animal.sing();

       //向下类型转换
       Animal a = new Cat();
       Cat c = (Cat)a;
       c.sing();
       c.eat();

       //编译错误
       //用父类引用调用父类不存在的方法
       //Animal a1 = new Cat();
       //a1.eat();

       //编译错误
       //向下类型转换时只能转向指向的对象类型
       //Animal a2 = new Cat();
       //Cat c2 = (Dog)a2;
    }
}

运行结果:

猫在唱歌!

猫在唱歌!

猫在吃饭!

初看,觉不出来多态的好处,感觉和继承挺像的,这些东西不用多态照样能够实现,这是因为目前我们接触的都是小Demo,等待以后做项目的时候强调的是对修改关闭,对拓展开放。多态能在以后帮助我们达到这些目标。例如之前写过一篇文章:《谈一谈:抽象工厂+反射+配置文件实现数据访问程序》,针对一些需求的修改,我们仅仅修改一下配置文件即可,而不用对源代码动刀。当然这个例子跟接口的多态有关,所以后续笔者还会总结一下抽象类和接口类,尝试让多态的优点更多的体现出来,敬请期待!

小结

封装即隐藏对象的属性和实现细节,仅对外提供公共访问方式,保证了模块具有较好的独立性,使得程序维护修改较为容易。继承提高了代码的复用性,多态提高代码的扩展性和可维护性。三者共同达到了一个目的:使得对应用程序的修改带来的影响更加局部化,程序更加健壮,而且易维护、更新和升级。

时间: 02-20

面向对象的三大特征——封装、继承、多态的相关文章

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

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

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

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

简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化. 总的来说还是接口的重用. 那么总结一下,JAVA的三大特征 其好处 就是代码与接口的重用. 封装可以隐藏实现细节,使得代码模块化: 继承可以扩展已存在的代码模块(类): 它们的目的都是为了——代码重用. 而多态则是为了实现另一个目

面向对象的四大特征 封装 继承 多态 抽象

1.封装 广义: 类 方法 包 的定义本身就是一种封装 狭义: 在设计一个类的时候 将所有的属性设置为私有的 并对各个私有的属性设计相应的 存/取方法 来完成对属性的使用 私有化只能代表封装的特性 可以说私有是封装的一种 不能说封装即是私有 封装的好处: 隐藏实现细节 提供公共的访问方式 提高了安全性 封装的原则: 将不需要对外提供的内容都封装起来 把属性隐藏 提供公共的方法进行访问 private关键字***** 关键字的特点: 1.私有的意思 2.是一个权限修饰符 3.可以修饰成员变量 和

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

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

Java面向对象编程三大特征 - 封装

Java面向对象编程三大特征 - 封装 本文关键字:Java.面向对象.三大特征.封装封装是面向对象编程中的三大特征之一,在对封装性进行解释时我们有必要先了解一些面向对象的思想,以及相关的概念.当我们想要去描述一系列的关系时我们要用到的最基本结构就是类,其中存在着成员变量和方法,用于记录属性和表达行为,相关知识请进传送门:Java中的基本操作单元 - 类和对象. 一.名词解读 为了解释封装的概念和作用,需要先来了解一下几个相关的概念,这有助于我们接下来的理解. 1. 权限修饰符 当我们在一个类中

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

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

OOP三大核心封装继承多态

OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用不是父子类的继承关系,而是一个类定义为另一个类的成员变量. 一个简单的例子,汽车和收音机,汽车里面有一个收音机,不能说继承,不符合逻辑,只能说是一种对象包含了另一个对象.汽车对象中调用了收音机对象中的方法. 多态就是同一请求,不同的响应操作. 多态 同一种方式处理相关对象的能力. 相同的请求操作不同

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

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