近日来重温了一下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.多态:多态总结起来就是一句话,父类的引用指向子类对象。此时调用的方法是子类重写过的方法。多态的具体体现有:继承(抽象类也是继承的一种体现),接口

java oop详解的更多相关文章

  1. Java内部类详解

    Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...

  2. 黑马----JAVA迭代器详解

    JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...

  3. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  4. Java虚拟机详解----JVM常见问题总结

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. [转] Java内部类详解

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  6. Java面向对象详解

    Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...

  7. java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")

    http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...

  8. java 泛型详解(普通泛型、 通配符、 泛型接口)

    java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...

  9. Java synchronized 详解

    Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...

随机推荐

  1. VUE长按事件

    PS:在开发中常常会有长按事件的需求,这里我简单的介绍几种长按事件的需求 需求一:长按数字累加或者累减 HTML: <div class="mui-numbox" data- ...

  2. Latex 论文elsevier,手把手如何用Latex写论文

    这几天在开始写论文,准备发的是elsevier,这个网站的instruction有问题,下载的东西基本上好多的错误,所以我就写博客记录. 首先看下:https://www.elsevier.com/a ...

  3. ubuntu tftp-server 服务器安装与配置

    第一步:安装tftp服务sudo apt-get install tftpd tftp openbsd-inetd第二步:目录配置vi /etc/inetd.conf修改文件夹为根目录下的tftpbo ...

  4. 【CSS】伪类和伪元素选择器

    伪类 基于当前元素所处的状态或具有的特性,用于设置元素自身的特殊效果. a:link  规定所有未被点击的链接: a:visited  匹配多有已被点击过的链接: a:active  匹配所有鼠标按下 ...

  5. Java中对图片文件的类型的获取

    public static void main(String[] args) {        File f = new File("c://test.jpg");         ...

  6. 01Vue数据双向绑定

    Vue作为前端MV*架构,Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注 ...

  7. 80端口被系统服务【kernel&System】占用解决方案

    netstat -ano | findstr port    //查看端口占用情况 tasklist | findstr port   //查看端口被占用的具体服务名 运行net stop http ...

  8. Windows下MongoDB常用命令

    以下命令中的启动与暂停服务命令需要使用管理员身份运行cmd.exe,其他命令需要先cd到Mongodb安装目录的bin目录. 1.启动服务:net start [Mongodb服务名].示例: net ...

  9. C++运算符重载(10)

    编译器在默认情况下为每个类生成一个默认的赋值操作,用于同类的两个对象之间相互赋值.默认的含义是逐个为成员赋值,即将一个对象的成员的值赋给另一个对象相应的成员,这种赋值方式对于有些类可能是不正确的. 运 ...

  10. 使用phpexcel类读写excel文件

    使用原生php读写excel文件的博文地址: 基于使用原生php读写excel文件的不靠谱,本文将简单介绍如何使用第三方类库phpexcel来读写excel文件. 首先,需要到githut下载phpe ...