当我们被问到你对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. Android文件的权限概念

    //通过context对象获取一个私有目录的文件读取流  /data/data/packagename/files/userinfoi.txt   FileInputStream fileInputS ...

  2. UTF-8编码规则(摘自JDK官方文档)

  3. 关于增强for循环的使用

    1 class MultipleQUestion extends Question{ //多选题类 2 3 private char[] answer; //多选题答案属性 4 5 public ch ...

  4. web虚拟主机、日志分割以及日志分析

    目录 一.构建虚拟web主机 1.1 概述 1.2 支持的虚拟主机类型 1.3 部署虚拟主机步骤 1.3.1 基于域名的虚拟主机 (1)为虚拟主机提供域名解析 (2)为虚拟主机准备网页文档 (3)添加 ...

  5. MySQL高级篇笔记

    目录 MySQL体系结构 存储引擎特点 InnoDB底层文件 MyISAM底层文件 索引 慢查询日志 profile详情 explain执行计划 EXPLAIN 执行计划各字段含义: 索引使用 最左前 ...

  6. Node.js躬行记(15)——活动规则引擎

    在日常的业务开发中,会包含许多的业务规则,一般就是用if-else硬编码的方式实现,这样就会增加逻辑的维护成本,若无注释,可能都无法理解规则意图. 因为一旦规则有所改变,那么就需要修改代码再发布代码, ...

  7. HMS Core机器学习服务助力Zaful用户便捷购物

    Zaful是近年来发展良好的出海电商平台,主打快时尚.在洞察其用户有购买街头海报.生活中同款衣物的需求后,Zaful联合HMS Core机器学习服务打造拍照购物服务.用户拍照后可在预设的商品图片库中搜 ...

  8. 5.Flink实时项目之业务数据准备

    1. 流程介绍 在上一篇文章中,我们已经把客户端的页面日志,启动日志,曝光日志分别发送到kafka对应的主题中.在本文中,我们将把业务数据也发送到对应的kafka主题中. 通过maxwell采集业务数 ...

  9. 阿里云服务器ECS挂载数据盘—linux系统

    参考阿里云官网帮助文档:https://help.aliyun.com/document_detail/25426.html 里面有些步骤说的不是很清楚,初学者可能操作时会遇到问题.通过这篇文档进行进 ...

  10. OpenStack、虚拟机以及和当前流行的k8s、Docker四者之间的关系

    一.OpenStack与虚拟机之间的关系 OpenStack使用Python语言开发,是虚拟资源管理工具,他可以协助你搜集各种资源,并加以利用以及管理,实现物理资源的高效使用和安全.虚拟化物理机这个动 ...