面向对象的核心特征之:封装、继承、多态

1.封装 Encapsulation

封装Encapsulation的定义:
 is the process of hiding the implementation details of an object 隐藏了一个对象的实现细节
 The internal state is usually not accessible by other objects 内部的状态也不为其他对象所访问
 The only access to manipulate the object data is through its interface 对象的数据只能通过接口去访问
 Encapsulation allows objects to be viewed as 'black boxes’ 封装使得对象可以被看成一个“黑盒子”
 It protects an object’s internal state from being corrupted by other objects.  保护数据
 Also, other objects are protected from changes in the object implementation. 一个对象实现方法的改变,不影响其他相关对象
 Communication is achieved through an 'interface’  对象间通过“接口”进行通信

要封装什么?
   内部的、不想让其他人随意了解的信息
   可以封装类的属性,如,“人” 这个类,封装个人的工资、资产、年龄等信息
   可以封装类的方法,如, “人”如何赚钱()?如何消磨时间()?
   我们为什么要封装
   保护隐私
   保护数据安全
   隔离复杂度 (内部实现细节不对外公开)。如“空调”,封装了制冷的过程,对人提供了一个制冷的按钮
   面向对象的封装有四种方式(可见性)
   Public
   Private
   Protected
   Package

规则:对象应该只显示与之交互所需的接口。与对象的使用无关的详细信息应该对其他对象隐藏。这是封装的一般规则

建议:对外提供Getters和Setters支持数据隐藏的概念因为其他对象不应该直接操作另一个对象中的数据。例如,如果用户需要访问某个属性,则调用方法返回该属性(getter)

2.继承 Inheritance

 什么是继承

 定义:有两个类:A类与B类,当两个类之间产生父子关系的时候,我们称为继承。
    继承是一种新建类的方式,继承的类称之为子类或派生类。
    被继承的类称之为父类或基类或超类。
    子类继承父类,也就意味着子类继承了父类所有的属性和方法,可以直接调用。
    java使用extends关键实现两个类的继承关系
  语法:
  public class FatherClass{
  //属性
  //方法
  }
  public class ChildClass extends FatherClass{
  //属性
  //方法
  }
 为什么使用继承:

 提高代码的复用性,使类与类之间产生了继承的关系,也是多态的前提

3.多态 Polymorphism

定义:

本意:有多种形态 “Having many forms”
“When one class inherits from another, then polymorphism allows a subclass to stand in for the superclass.” 当一个类从另一个类继承而来,多态使得子类可以代替父类

The sender of a stimulus doesn’t need to know the receiver’s class消息发送方不需要知道消息接收方属于那个子类

Different receivers can interpret the message in their own way同一类族的接收者可以按自己的方式处理消息

推论Consequence
different receivers can response to the same stimulus based on their interpretation同一类族的接收者可以按自己的方式处理同一个消息
So we can have a variety of objects who process the same piece of data in different ways.有多种对象可以按自己的方式处理相同的数据

举例:

如下图,Jet继承AirPlane,然后AirPlane继承Plane

  多态的三个条件:

1) 继承的存在(继承是多态的基础,没有继承就没有多态).

2) 子类重写父类的方法(多态下调用子类重写的方法).

3) 父类引用变量指向子类对象(子类到父类的类型转换).

子类转换成父类时的规则:

将一个父类的引用指向一个子类的对象,称为向上转型(upcastiog),自动进行类型转换.

此时通过父类引用调用的方法是子类覆盖或继承父类的方法,不是父类的方法.

此时通过父类引用变量无法调用子类特有的方法.

如果父类要调用子类的特有方法就得将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换.

 多态是由于继承和重写机制,相同类型的对象,执行相同的方法,得到的结果可能不一样。 
例如:我再给以上例子的圆类中加一些代码:
public class Circle extends Shape{

//特有的半径属性
   public float R;

//获得半径的方法
   public void GetR(float r){
   R=r;
   }

//重写周长和面积的方法
    public void Length(){
    float a = (float) ((float)2*3.14*R);;
    System.out.println("周长是"+a);
    }
    public void Area(){
    float b = (float)3.14*R*R;
    System.out.println("面积是"+b);
    }

}

测试代码:
public static void main(String[] args) { 
   Circle cir = new Circle();
   cir.GetR(3);
   cir.Area();
   cir.Length();  
}

测试结果并不是Shape中的方法执行的结果,由于方法相同,但是继承之后子类重写了方法,方法体不同,导致了最后结果不一样,这就是多态。

(0)

相关推荐

  • 继承,重写,多态

    继承 继承的本质是对某一类的抽象,从而实现对现实世界更好的建模. extends的意思是"扩展",子类是父类的扩展 java中类只有单继承,没有多继承 继承是类和类之间的一种关系. ...

  • [Android]【安卓】【Java】final关键字

    [Android][安卓][Java]final关键字 ME: 1.final修饰的类:不可被继承. 2.final修饰的方法:不可被重写. 3.final修饰的变量:初始化后的值不可改变.成员变量和 ...

  • 继承的使用,方法重写(覆盖),super关键字

    认识继承 不同类型的对象,相互之间经常有一定数量的共同点.例如,小明同学.小红同学.小李同学,都共享学生的特性(班级.学号等).同时,每一个对象还定义了额外的特性使得他们与众不同.例如小明的数学比较好 ...

  • 封装+继承+多态

    面向对象三大特性 封装: Encapsulation是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法.封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随意访问.要访问该类 ...

  • 面向对象: 理解python类的单继承与多继承

    俗话说"龙生龙凤生凤老鼠的孩子会打洞",每种动物都有各自的特性,比如 老鼠会打洞 猫会爬树 鲨鱼会游泳 不同种类有不同的天性.而在程序员的思维中,动物是对象, 天性是这个类方法或者 ...

  • 中文有封装继承和多态性将成为世界文

    在计算机编程世界里支持面向对象编程的语言至少有Java,Objective-C,C++,C#,PHP等正被多数程序员使用,有三大特性:封装性.继承性.多态性.封装隐藏实现细节,使代码模块化:继承方便扩 ...

  • 基础知识--封装、继承、多态、抽象

    一.封装 封装:是面向对象方法的重要原则,就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开,别人只 ...

  • 编程语言Java中的三大特性:封装、继承、多态

    编程语言Java中的三大特性:封装.继承.多态封装:概念:封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问,适当的封装可以让代码更容易理解与维护,也加强了代码的安全性.原则:将属性隐 ...

  • C++入门到精通:面向对象程序设计中的继承与派生!

    面向对象程序设计有4个主要特点:抽象.封装.继承和多态性.本章主要介绍有关继承的知识,多态性将在后续章节中讲解. 继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对 ...

  • C++面向对象:C++ 多态

      ​ 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态. C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数. 小编推荐一个学C ...

  • C++面向对象:C++ 继承

    面向对象程序设计中最重要的一个概念是继承.继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易.这样做,也达到了重用代码功能和提高执行效率的效果. 当创建一个类时,您不需要重新 ...

  • 名师评析 | 邹明贵:在继承中创新 落实核心素养——广东卷评析

    历史园地 中学历史教学第一公号 226篇原创内容 公众号 2021年广东省选择性考试历史科试题设计紧扣时代脉搏,把握时代精神,依托高考评价体系,加强关键能力考查,落实立德树人根本任务,体现了高考&qu ...