java oop详解

exceptionblog 2017-11-23 原文

java oop详解

近日来重温了一下java oop的知识。加深了对面向对象的理解。尤其时继承方面。故写一篇博客。记录一下自己的想法和心得

 

1.面向对象主要分为三大点(封装,继承,多态)

封装的思想促进了类的形成。相比于之前面向过程的编程。所有的方法和属性都堆积在一个main方法中,代码无法重复利用。重复率高。代码的可读性也非常的差。因此。封装呼之欲出。将共有的成员变量和行为封装成类。方便代码的复用和隐藏。

 

继承:将多个类的共有属性和方法封装成一个父类。而继承该父类的子类将拥有父类拥有的属性和方法。减少代码的重复率。

  (1.成员变量:(结论1)父类的成员变量会被子类继承,且子类对象中该成员变量和子类中的父类对象的该成员变量指向一个内存地址。也就是说,改变一个,另一个也会被改变

   (结论2)子类还可以重新定义相同名字的成员变量,此时,父类中的成员变量将对于子类被隐藏。改变子类的成员变量时,就是改变子类新定义的成员变量。而子类对象中的父类对象的成员变量并没有改变。此时想要在子类中调用父类的隐藏成员变量,只能通过super或者父类的引用来调用。

  下面是不同修饰符修饰父类成员变量时继承的详解

    (1.1由(public、default、protected、private)修饰的成员变量。子类都可以继承。但是在子类中是否能够访问就取决于父类成员变量的修饰符了。且他们都满足上面论述的两段话。也就是说,当子类继承了父类的成员变量后,子类和父类的成员变量指向的是同个地址,当一个改变。。。。重复上面的话。当子类无法访问到父类的成员变量的时候,子类会去定义新的成员变量,父类的同名成员变量就被隐藏了。

    (1.2由static修饰的成员变量。子类都可以继承。此时,继承过来的也是static变量。也就是说,父类和子类共享同一内存的静态变量。一个改变另一个也跟着改变。(注意比价static变量和普通变量的区别,我加黑的两段话。一个针对于类,一个针对于对象)。同时,子类还可以定义新的同名成员变量(无论是否为静态),此时父类中的静态变量都会针对于子类被隐藏。

    (1.3由final修饰的成员变量,子类都可以继承.此时继承而来的是final类型的变量,子类无法去更改他。且满足结论一。且此时子类可以重新定义同名(不要求类型)的变量,此时父类中的成员变量也会相对于子类被隐藏。

 

  (2.方法:父类的方法是否能被子类继承。继承之后能否被重写,能否体现出多态。就要关注父类中该方法的修饰词。(排除一个,父类的构造方法无法被子类继承)

    (2.1 由public default protected private 定义的方法,子类都能够继承。只是,子类能不能访问到或者说调用到这个方法就要看父类方法前的控制符了。只要子类能够访问到该方法,子类就能重写该方法。此时,多态可以体现

    (2.2由static修饰的方法,子类都可以继承,且可以通过父类或者子类的类名以及对象去访问。但是,该方法无法被子类重写。如果子类想定义同名的方法,除非时static方法,要不然编译器会报错。显示不能重写。而子类定义同方法签名的static方法时,编译器会认为这是子类新定义的方法。父类中的方法将会针对于子类被隐藏。此时,父类引用指向子类对象的多态行为消失。改变成根据引用来调用方法。

  针对于static方法的无法重写性,我们可以在抽象类中定义static非抽象方法,此时,表明子类的实现过程都一致,都是被父类提前编写好了,子类无法重写,断绝子类手滑重写不该重写的方法的可能性。

    (2.3由final修饰的方法,子类都可以继承,但是别说重写了,就连隐藏,都无法隐藏。因此,此时的子类只能老老实实的用父类的方法。要么,对其进行方法重载,说白了是定义一个不一样的方法。多态行为消失

    (2.4由abstract修饰的方法,子类必须继承然后重写。多态行为体现

 

3.多态:多态总结起来就是一句话,父类的引用指向子类对象。此时调用的方法是子类重写过的方法。多态的具体体现有:继承(抽象类也是继承的一种体现),接口

发表于 2017-11-23 15:16 一个待业码农的救赎 阅读() 评论() 编辑 收藏

 

版权声明:本文为exceptionblog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/exceptionblog/p/7885045.html

java oop详解的更多相关文章

  1. java json转换工具类

    在java项目中,通常会用到json类型的转换,常常需要对 json字符串和对象进行相互转换。 在制作自定义的 […]...

  2. Java 并发编程(一):摩拳擦掌

    这篇文章的标题原本叫做——Java 并发编程(一):简介,作者名叫小二。但我在接到投稿时觉得这标题不够新颖,不 […]...

  3. Java 集合系列06之 Vector详细介绍(源码解析)和使用示例 – 如果天空不死

    Java 集合系列06之 Vector详细介绍(源码解析)和使用示例   概要 学完ArrayList和Lin […]...

  4. JAVA NIO学习二:通道(Channel)与缓冲区(Buffer) – pony1223

    JAVA NIO学习二:通道(Channel)与缓冲区(Buffer) 今天是2018年的第三天,真是时光飞逝 […]...

  5. 2019 Java 全栈工程师进阶路线图,一定要收藏

    技术更新日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点松哥是深有体会的。 我刚开始学习 […]...

  6. 一次线上问题排查所引发的思考

    前言 之前或多或少分享过一些内存模型、对象创建之类的内容,其实大部分人看完都是懵懵懂懂,也不知道这些的实际意义 […]...

  7. 面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

      如果你去面试,面试官不问你这个问题,你来找我^_^ 下面直接来干货,先说这三个Map的区别: HashTa […]...

  8. Java–高效的定时任务设计

    相信你在日常的开发中肯定遇到过这种问题: 需要对实体类的状态信息进行管理,比如一定时间后修改它为XXX状态. […]...

随机推荐

  1. 正则表达式之初入江湖

    为什么要学正则表达式 很多人对正则表达式的认知只是在进行表单验证的时候在网上搜一段正则表达式进行copy,实际 […]...

  2. Microsoft SQL server 2012数据库学习总结(一)

      一、Microsoft SQL Server2012简介 1、基本概要   Microsoft SQL S […]...

  3. 摄影基础知识入门

    这是一篇关于摄影基础知识的入门介绍。多图警告,加载会非常慢。 声明:本博文绝非本人原创,也绝不用于商业用途,只 […]...

  4. ElasticStack学习(五):ElasticSearch索引与分词

    ElasticStack学习(五):ElasticSearch索引与分词 一、正排索引与倒排索引 1、什么是正 […]...

  5. ByteView和Sink

    久违啦米娜桑!!! 最近有点忙,一月有余没有更新了,实在对不起大家!!! 上线后看到不少朋友发的私信,感谢大家 […]...

  6. java 对于手机号码、邮箱、银行卡号脱敏一条龙服务

    private static final Pattern MOBILE_PATTERN = Pattern.c […]...

  7. 多线程

    1.多线程 1.创建多线程 1.第一种创建方式 Thread类 创建Thread类: 实现步骤: 创建一个Th […]...

  8. 基于 Kong 和 Kubernetes 的 WebApi 多版本解决方案

    前言 大家好,很久没有写博客了,最近半年也是比较的忙,所以给关注我的粉丝们道个歉。去年和朱永光大哥聊的时候提了 […]...

展开目录

目录导航