当我们被问到你对java的封装、继承、多态是什么看法的时候,你会想到什么?

想到的会不会是封装就是将类的成员属性用privet修饰一下,达到私有化的目的,只暴露方法,从而达到成员变量私有化的目的。

而继承就是子类继承父类,重写父类的非私有化方法,获得父类的非私有化属性

而多态就是基于继承、重写。而达到相同的消息使得不同的类做出不同的响应。

面向对象的三大特性:

1、封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现。 

2、继承:很好的实现了代码的复用,提高了编程效率。 

3、多态:程序的可扩展性及可维护性增强。

一、封装

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。

对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有三大好处:

1、良好的封装能够减少耦合。

2、类内部的结构可以自由修改。

3、可以对成员进行更精确的控制。

4、隐藏信息,实现细节。

封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

public class Husband {  

      

    /* 

     * 对属性的封装 

     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 

     /  

    private String name ;  

    private String sex ;  

    private int age ;  

    private Wife wife;  

      

    /
 

     * setter()、getter()是该对象对外开发的接口 

     */  

    public String getName() {  

        return name;  

    }  

  

    public void setName(String name) {  

        this.name = name;  

    }  

  

    public String getSex() {  

        return sex;  

    }  

  

    public void setSex(String sex) {  

        this.sex = sex;  

    }  

  

    public int getAge() {  

        return age;  

    }  

  

    public void setAge(int age) {  

        this.age = age;  

    }  

  

    public void setWife(Wife wife) {  

        this.wife = wife;  

    }  

}

封装可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。就可以对成员变量进行更精确的控制。

`public void setAge(int age) {

if(age > 120){

System.out.println("ERROR:error age input....");    //提示错误信息

}else{

this.age = age;

}

}

public String getSexName() {

if("0".equals(sex)){

sexName = "女";

}

else if("1".equals(sex)){

sexName = "男";

}

else{  

             sexName = "人妖";  

         }

return sexName;

}  `

版权声明:本文为CSDN博主「jianyuerensheng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/jianyuerensheng/article/details/51602015

二、继承

1、继承的关键词

extends

例如:  class B extends A  {}

则表示B类继承了A类

java仅支持"单一继承"

继承的好处: 实现代码的重用。

java.lang.Object是所有类的超类。

2、子类可以继承父类的哪些内容?

a、成员变量

b、成员方法

c、构造方法不能继承

3、子类创建对象时,会调用父类的构造方法吗?构造方法的调用顺序?

会调用父类的构造方法。

先调用父类的构造方法,再调用子类的构造方法

4、子类可以有自己扩展的属性和方法?

可以。

父类中存放的是所有子类共有的属性和方法 。 因此 父类更加通用。

子类除了继承父类的属性和方法外,还可以有自己扩展的属性和方法,因此子类更具体。

5 继承关系中的父类如何得到?

类:具有相同属性和方法的一组对象"抽象"而得

父类:具有大量相同代码(属性和方法)一组类的”抽象"

子类和父类之间存在 is -a 的关系

2、方法的覆盖

1、什么是方法重写?

在子类中定义了一个与父类相同的方法  ==》子类覆盖了父类的方法,或子类重写了父类的方法

2、方法重写的特点?

a、在继承关系的子类中

b、子类的方法名和参数与父类的方法名和参数相同

c、子类中的方法的访问权限不可低于父类的访问权限

d、子类中的返回值类型与父类的返回值类型一致,或是父类方法返回值类型的子类类型

e、子类的方法不能声明比父类更宽泛的异常

3、何时方法重写?

当父类中的方法不能满足子类功能的需求时,在子类中重写父类中的方法

4、注意事项:

a) 子类重写了父类的方法,子类对象调用方法时,调用子类重写后的方法

b) 子类中的方法的参数与父类不同,则不是方法重写,而是在子类中构成了方法的重载。

可以在子类方法不添加"@Override"验证重写的格式是否正确

c) 方法重写仅对于成员方法,同时某些方法是不能重写的

i. 私有的成员方法不能重写

ii. 父类中的final方法不能重写

iii. 父类中的静态方法不能重写

iv. 成员变量不存在重写

3、super关键字

1、super是什么?

super关键词不是引用,super中存储的不是内存地址,super指向的不是父类对象

super代表的是当前子类对象中的父类型特征。

2、何时使用

子类和父类中有相同名称的属性时,使用super.属性名访问父类的属性

3、supe可以用在什么地方?

3.1 super在子类的成员方法中使用

super.属性名:访问的是父类中的属性

super.方法名(参数):访问的是父类中的成员方法

3.2 super可以在子类的构造方法中使用,调用父类的构造方法。

语法:super(参数)  必须写在子类构造方法的"第一行"

三、多态

1 多态的前提

1.1 继承的存在

1.2 方法重写

2 多态表现方式:

2.1 语法:

父类类型  引用名= new 子类类型();

2.2 多 态的一般格式为:方法的参数

使用一个方法可以对应父类的所有子类。

  1. 将父类的引用做为方法的形参。

    2)将子类的实例做为方法的实参。

    3 多态的好处:

    3.1  满足开发的原则:  开-闭原则

    开: 对功能的扩展开放。---》创建新的子类,通过方法重写修改原父类中的方法的功能。

    闭合 :对原有代码的修改是闭合。 同时保证原有功能和新功能都可以执行。==》以多态的方式,在不修改原代码的情况下使用子类

    3.2 多态的作用: 代码的复用,易扩展。易维护。

引用类型之间的类型转换: 前提类之间有继承关系

1、向上转型 父类类型的引用 引用 子类对象

1) 语法: 父类类型  引用名= new 子类类型();

2)父类型的引用可以访问哪此方法

a 、父类中声明的方法

b、如果子类中重写了父类的方法,则执行子类重写后的方法

c、 不能访问子类中特有的方法。

3) 示例:

 

2、向下转型

1) 语法:

(子类类型)父类引用;  //父类引用所引用的对象为子类对象

2) 向下转型是不安全的。 引发异常: java.lang.ClassCastException

3)向下转型 之间使用instanceof关键词判断。

语法:

引用名  instanceof 类名或接口名

编译期: instanceof 类名  与引用名的类型之间有继承关系,无则编译错误!

运行期: 引用的对象的类型为 "instanceof 类"的同类或子类  返回true, 其他 返回false

多态的好处

java的三大特性----封装、集成、多态的更多相关文章

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

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

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

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

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

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

  4. 初步理解Java的三大特性——封装、继承和多态

    声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...

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

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

  6. Java提高篇之理解java的三大特性——封装

    三大特性之—封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐 ...

  7. Java提高篇之理解java的三大特性——继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  8. java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  9. java提高篇(三)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

随机推荐

  1. 【转】Nestable可拖拽树

    原文地址:https://blog.csdn.net/wangmj518/article/details/81746523 Nestable是基于Bootstrap的一个可拖拽的树结构表现插件. 下面 ...

  2. element-ui 使用 Select 组件给 value 属性绑定对象类型

    qq_36437172 2020-06-28 22:38:49  778  收藏 分类专栏: element-ui 文章标签: element-ui Select 组件 value 属性 绑定 对象类 ...

  3. 还在做廉价的劳动力?部署PXE实现Kickstart无人值守安装

    搭建PXE实现Kickstart无人值守安装 1.搭建PXE远程安装服务器 2.实现kicstart无人值守安装 1.PXE介绍及搭载: PXE是有Intel公司开发的网络引导技术,工作在Client ...

  4. 蟒蛇书学习笔记——Chapter 09 Section 01 创建和使用类

    9.1 创建和使用类 9.1.1 创建Dog类   根据Dog类创建的每个实例都将存储名字和年龄,我们赋予了每条小狗蹲下(sit( ))和打滚(roll_over( ))的能力: class Dog: ...

  5. node 解决存储xss风险报告

    1. 安装 xss模块 npm install xss 2.在 Node.js 中使用 const xss = require("xss"); // 在项目的接口里面添加 let ...

  6. Windows office2019免费激活,附代码

    office2019地址:链接:https://pan.baidu.com/s/1zPt5U7b0L-bGHl5AOtYs2w提取码:m5ei 新建一个txt,然后把这段代码放进去,然后保存关闭改后缀 ...

  7. 组合&反射&面向对象内置函数

    内容概要 组合 反射 面向对象的内置函数 异常 内容详细 一.组合 组合:在对象中定义一个属性,属性的值是另一个对象 除了继承父类的方法,这是获取另一个类中属性的另一种方式 如果想给学生对象添加课程属 ...

  8. 手把手教你在命令行(静默)部署oracle 11gR2

    文章目录 环境介绍 linux发行版 cpu.内存以及磁盘空间 敲黑板 关闭防火墙以及selinux 操作系统配置 使用阿里的yum源提速 安装依赖软件 设置用户最大进程数以及最大文件打开数 内核参数 ...

  9. CMake 交叉编译

    CMake 交叉编译 交叉编译就是说在平台 A (宿主机)上编译出可以在平台 B (目标机) 上运行的程序,比如在 x86 上编译 ARM 程序 要交叉编译首先要去下载目标平台的工具链,比如要编译 A ...

  10. CVE-2017-0213漏洞复现

    CVE-2017-0213漏洞形成的原因 类型混淆的漏洞通常可以通过内存损坏的方式来进行利用.然而漏洞发现者在利用时,并未采用内存损坏的方式来进行漏洞利用.按照漏洞发现者的说法,内存损坏的利用方式需要 ...