文档章节

Java 复习 —— OOP

learn_more
 learn_more
发布于 2015/08/06 09:48
字数 1266
阅读 160
收藏 9

面向对象基本概念

1、面向对象(OOP、OOD)三大特点:封装、继承、多态。注意,抽象不是特点之一

2、面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象。现实世界中,数据和行为并存,程序也是如此,因此这两种编程方式我们都得学。

3、类的概念是一个抽象的概念,包括数据和对数据的操作,其中数据就是属性或成员变量,对数据的操作就是方法。

4、对象的概念是类的一种更具体表示。

5、函数则是游离在类之外的方法,java不支持,编译错误。


封装

1、封装:把数据与对数据的操作进行封装在一起。

2、java中方法参数传递只有传值,对于原生数据类型传的就把变量的值传递过去;对于引用数据类型则传递的是这个引用类型变量的地址,传递的地址值,这个值是常量不能修改,所以,C++中可以传指针,那是可以改变的地址值。

3、实例化(new)一个对象时需要执行三个步骤:

    1)开辟一个内存空间;

    2)调用类的构造方法;

    3)将对象的生成地址返回赋值给引用类型变量。

4、实例化的具体流程:

    1)父类的静态域初始化,父类静态成员变量的初始化以及静态代码块的执行,应该是按照成员变量和代码块的先后顺序;

    2)子类的静态域初始化,子类静态成员变量的初始化以及静态代码块的执行,应该是按照成员变量和代码块的先后顺序;

    3)父类的非静态域初始化,父类非静态成员变量的初始化;

    4)父类构造方法被调用;

    5)子类的非静态域初始化,子类非静态成员变量的初始化;

    6)子类构造方法被调用。


继承

1、继承:java单继承,子类继承父类。

2、关于继承的特点:

    1)构造方法不能被继承;

    2)子类在构造方法中默认调用了父类的无参构造方法,换句话如果父类没有这样的构造方法,那么运行时会报错;

    3)可以通过super();调用父类的构造方法,但是这条语句必须是构造方法的第一句,同样this()也是一样。

3、方法重写(Override)与重载(Overload),重写是子类对父类方法的覆盖,重载是相同方法名称不同参数而已。


多态

1、多态:晚绑定,即在编译时并没有多态,而是在运行时才有多态,所以说重写是运行时多态,而重载则是非运行时多态。

2、对于同名方法调用子类优先,但是同名属性调用则是父类优先;

3、关于多态注意事项:

    1)对于静态的方法和属性是可以被子类继承的同时也是可以被子类重写的,他和普通的非静态方法在继承上是有区别的;这里涉及到隐藏的问题,比如有个静态方法和一个静态属性的超类,这个时候一个子类继承了他,那么会把这些静态方法全部继承,同时这个时候子类也重写了这个属性和方法,注意重写时不能更改static,否则会编译报错;

如果,采用子类直接去调用这个方法和属性的话,返回的是子类定义的,其实也就是父类的被隐藏;
如果,采用子类的实例,而且这个实例就是子类类型的话,返回就是子类定义的,也是父类的被隐藏;

如果,采用子类的实例,但是这个实例是父类类型的话,返回的就是父类定义的,也就是子类被隐藏;

总结就是:由类型本身决定多态;

    2)对于非静态的属性,和上面的情况一模一样,他的多态完全由类型决定,而不是对象本身;

    3)对于非静态的方法,和上面就不一样了,他的多态是由对象本身决定,所以是运行时才知道的。

4、关于final使用注意事项:

    1)final修饰的类是不能被继承的,比如String

    2)final修饰的方法不能被重写,但是可以继承,默认也是static的,只是不能重写;

    3)final修饰的属性不能二次赋值,但是可以继承,同时可以同名覆盖,其实就是和static差不多,默认是static的


© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(2)

learn_more
learn_more 博主

引用来自“起名字凡人”的评论

为啥没人评论啊
多多指教
起名字凡人
起名字凡人
为啥没人评论啊
从Java到JVM到OS线程的优先级

前言 Java 的线程的调度机制由 JVM 实现,假如有若干条线程,你想让某些线程拥有更长的执行时间,或某些线程分配少点执行时间,这时就涉及“线程优先级”。 优先级别 Java 把线程优先级分成1...

超人汪小建
2018/06/25
0
0
从Java到JVM到OS线程睡眠

前言 Java 中有时需要将线程进入睡眠状态,这时一般我们就会通过使线程进入睡眠状态,接下去就看看执行该语句在 JVM 中做了什么。 简单例子 以下是一个简单的例子,使主线程睡眠5秒钟。 JVM ...

超人汪小建
2018/08/20
0
0
本地方法怎么映射Java层的数据类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangyangzhizhou/article/details/79576578 前言 Java 语言上定义了不同的数据类型,比如有基础类型、等等,还...

超人汪小建(seaboat)
2018/03/16
0
0
将 Java 作为入门编程语言有错吗?

Java 依然是最流行的编程语言,但很少有人认为它是最酷的编程语言。一些人甚至认为,Java 已进入垂暮之年,因此许多从事教育的人都不愿意教 Java。 于是问题来了:学校和大学是否依然应该教学...

CSDN资讯
2018/11/24
0
0
java1.8-函数式(Functional)接口

什么是函数式(Functional)接口 l只包含一个抽象方法的接口,称为函数式接口。 l你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该...

architect刘源源
05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux的基本命令

目录的操作命令(增删改查) 增: mkdir 目录名称; 查: ls 可以看到该目录下的所有的目录和文件 ls -a,可以看到该目录下的所有文件和目录,包括隐藏的 ls -l,可以看到该目录下的所有目录和...

凹凸凸
今天
2
0
在古老unix中增加新用户

Installing 4.3 BSD Quasijarus on SIMH 目标:要在4.3BSD中新增加用户dmr,指定目录/home/dmr,uid为10 gid=31(guest组,系统已建立) 4.3BSD还没有adduser或useradd 直接修改/etc/passwd...

wangxuwei
今天
2
0
Bootstrap(六)表单样式

基本样式 所有设置了 .form-control 类的 <input>、<textarea> 和 <select> 元素都将被默认设置宽度属性为 width: 100%;。 将 label 元素和前面提到的控件包裹在 .form-group 中可以获得最好...

ZeroBit
昨天
3
0
SSL 证书格式转换

SSL 证书格式转换 不同服务器情况下,需要不同的证书格式。 比如 pem 转 pfx。 pem在window 平台下可以导入,但是无法正常使用。 需要转换成pfx。 推荐在线转换工具,由中国数字证书网站提供...

DrChenXX
昨天
2
0
HAProxy

xx

Canaan_
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部