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.多态:多态总结起来就是一句话,父类的引用指向子类对象。此时调用的方法是子类重写过的方法。多态的具体体现有:继承(抽象类也是继承的一种体现),接口
java oop详解的更多相关文章
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 黑马----JAVA迭代器详解
JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- Java面向对象详解
Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...
- 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 ...
- java 泛型详解(普通泛型、 通配符、 泛型接口)
java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...
- Java synchronized 详解
Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...
随机推荐
- Go语言备忘录:net/http包的使用模式和源码解析
本文是晚辈对net/http包的一点浅显的理解,文中如有错误的地方请前辈们指出,以免误导! 转摘本文也请注明出处:Go语言备忘录:net/http包的使用模式和源码解析,多谢! 目录: 一.http ...
- Fatal error in launcher:Unable to create process using '"'
Windows下同时存在Python2和Python3使用pip时系统报错:Fatal error in launcher: Unable to create process using '" ...
- hashlib模块--摘要算法
算法介绍: Python的hashlib提供了常见的摘要算法:MD5,SHA()等. 摘要算法,又称哈希算法,散列算法.通过一个函数,吧任意长度的字符串转换为固定长度的字符串(16进制) 摘要算法就是 ...
- c++中vector的pair与make_pair的使用,双关键字排序
#include <vector> #include <iostream> #include <algorithm> using namespace std; bo ...
- 【转】缓存淘汰算法系列之2——LFU类
原文地址 :http://www.360doc.com/content/13/0805/16/13247663_304916783.shtml 1. LFU类 1.1. LFU 1.1.1. 原理 L ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(06异常过滤器)
概念介绍 异常过滤器主要在我们方法中出现异常的时候触发,一般我们用 异常过滤器 记录日志,或者在产生异常时做友好的处理 如果我们需要创建异常过滤器需要实现IExceptionFilter接口. nam ...
- DOS和windows的区别?
2017-09-25 19:18:03 本质:都是微软公司的操作系统,某种从程度上说windows是dos的后续操作系统版本.只是windows相比dos有质的飞跃.dos只支持命令操作,windo ...
- jdbc链接hive报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport
写了个jdbc连接hive2的demo,结果报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport,实际 ...
- AI翻译离无障碍交流有多远
AI翻译服务通过硬件.软件连接千千万万个应用场景,会打破语言不通的尴尬局面吗?会是人工翻译的终结者吗? 世界这么大,我想去看看!十一长假临近,梦想中的你背起行囊,自由行走在异国的大街小巷.然而现实的画 ...
- 如何内网搭建NuGet服务器
NuGet 是.NET程序员熟知的给.NET项目自动配置安装library的工具,它可以直接安装开源社区中的各个公用组件,可以说是非常方便.不过,有些时候,公司内部的公用的基础类库,各个项目都有引用, ...