4面向对象(OOP)
学习线路
初学:
熟悉语法
进阶:
1、23种设计模式
2、6中开发原则
高级:
1、优化
2、架构
3、安全
概念
类:一类具有相同特性的事物的抽象描述,用一个java类表示。
成员变量:抽取的属性。
方法:抽取的行为。
对象:是类的实体。(object/instance)
类与对象
1、如何声明一个类
[public 等修饰符] class 类名称{
类成员列表;
}
2、创建对象
类名称 对象名 = new 类名称();
3、属性:位置在类中,方法外
为属性赋值:对象.属性 = 值;
(1)属性有默认值
和数组的元素的默认值是一样的:
byte,short,int,long:0
float,double:0.0
char:\u0000
boolean:false
引用数据类型:null
- 权限修饰符(*****)
| 修饰符 | 本类 | 本包 | 子类 | 任何地方 | 可修饰 |
|---|---|---|---|---|---|
| private | ✔ | ✘ | ✘ | ✘ | 属性、方法、内部类、构造器 |
| default | ✔ | ✔ | ✘ | ✘ | 属性、方法、内部类、构造器、外部类 |
| protected | ✔ | ✔ | ✔ | ✘ | 属性、方法、内部类、构造器 |
| public | ✔ | ✔ | ✔ | ✔ | 属性、方法、内部类、构造器、外部类 |
方法
声明方法
1、 声明方法 1、先声明后使用
2、位置:类中方法外
3、格式:
[修饰符] 返回值类型 方法名(形参列表){
方法体(实现该功能的代码);
}
2、形参:定义/声明方法时()中的参数。
实参:调用方法时传入的参数。
3、形参是基本数据类型时,传值;当是引用数据类型时,传引用(地址)
注意:String对象不可变,还有包装类等对象
调用方法
1、静态方法
非本类 类名.方法名();
本类 方法名();
2、非静态方法
对象.方法名();
方法的特点
1、先声明后调用
2、不调用不执行,调用一次执行一次
3、方法最多有一个返回值;可以没有返回值,当返回值数量大于1时,用数组或者集合装起来后,返回
4、方法可以嵌套调用,但是不可以嵌套定义。
方法的重载(Overload)
定义:(1)相同类中的两个或多个方法(2)方法名相同,形参列表不同(类型、个数、顺序)(3)与返回值类型无关。
命令行参数:给主方法(main)传递实参。
cmd 模式下》》 java 类名称 实参1 实参2 实参3 ....
可变参数
某个方法调用时,实参的个数是可变的。
(1)一个方法最多有一个可变参数
(2)必须放在最后
public int qiuhe(int... num){//num本质是数组
int sum = 0;
for(int i=0;i<num.length;i++){
sum += num[i];
}
}
如何调用?
(1)传递相同类型的参数0~n个
(2)可以传递相同类型的数组
构造器
1、有什么作用
(1)创建对象时,并为属性赋值。
2、有什么特点
(1)所有类都有构造器,如果这个类没有显示声明构造器,将默认有无参构造,若加了构造器,则不再有无参构造器。
(2)构造器可以重载
(3)构造器名和类名相同
3、如何声明
【修饰符】 构造器名(){}
【修饰符】 构造器名(形参列表){}
4、怎么调用构造器
在非本类中 类名 变量名 = new 类名();
this关键字
用法:
this.属性;
当成员变量与局部变量重名时,成员变量前加this,加以区分。
this.方法();
this代表当前对象。
this();
表示访问本类的无参构造,有形参时,访问有参构造。必须在构造器中第一句。
super关键字
super.属性
当子类与父类的某个可见的属性“重名”时,用“super.”表示访问父类的属性
super.方法();
当子类需要调用父类重写的方法时,需要加"super."
super();
只能出现在子类构造器的首行。
默认出现的是super(),表示调用父类的无参构造器。你写不写我都存在。
如果父类没有无参构造,必须在子类的构造器首行,用super(实参列表)调用父类的构造器。
包的概念 package
作用
1、避免类的重名
2、用于控制访问权限
3、划分项目的结构层次,通常将功能相近的类划分到同一个包中
规则
1、用package定义包,位于源文件首部
2、包的命名规范 xxx.yyy.zzz(通常以所在公司的域名的倒置)
导包 import
1、位置:package和class之间
2、import 包名.类名;
import 包名.*;
构造器
1、每个类都有构造器
2、当没有显示声明构造器时,默认提供无参的构造器;当显示声明构造器时,则不再提供无参构造器,若需要还需显示声明。
构造器的特点
1、没有返回值
2、构造方法名和类名一样
3、可以重载
4面向对象(OOP)的更多相关文章
- PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...
- 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...
- php面向对象(OOP)编程完全教程
摘自:http://www.php-note.com/article/detail/41 面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行P ...
- 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装
接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...
- 面向对象(OOP)基本概念
面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...
- python-面向对象-01_面向对象(OOP)基本概念
面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...
- [Python_4] Python 面向对象(OOP)
0. 说明 Python 面向对象(OOP) 笔记.迭代磁盘文件.析构函数.内置方法.多重继承.异常处理 参考 Python面向对象 1. 面向对象 # -*-coding:utf-8-*- &quo ...
- PHP面向对象(OOP)编程入门教程链接
PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...
- Python3中面向对象 OOP
Python3中面向对象 OOP 定义: python中通过关键字 class 实现类的定义: class ClassName(object): pass 获取成员变量:ClassName.变量名 修 ...
- 如何吃透Python的面向对象(OOP)
本篇可乐和大家一起来吃透 Python 的面向对象,类和实例. 面向对象(OOP) 解释:面向对象它是一种编程的思想,将现实事物抽象化为编程对象. 举例说明:喝可乐 ① 选择自己根据配方买对应的材料 ...
随机推荐
- shzr要填的各种坑
shzr要填的各种坑 如果大家看到我学了什么算法没写总结,或者做了什么题没写题解,欢迎让我填坑. 计划要写的: [ ] 点分治 [ ] 整体二分 [ ] CDQ分治 [ ] Min-Max容斥 [√] ...
- SpringBoot系列 - 集成JWT实现接口权限认证
会飞的污熊 2018-01-22 16173 阅读 spring jwt springboot RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authenticati ...
- Asp.net Web Api开发Help Page配置和扩展
为了方面APP开发人员,服务端的接口都应当提供详尽的API说明.但每次有修改,既要维护代码,又要维护文档,一旦开发进度紧张,很容易导致代码与文档不一致. Web API有一个Help Page插件,可 ...
- 小a的轰炸游戏 (差分)
我是看题解的! 这道题还是有很多细节,当然,是一道差分的好题! 题意:有2种飞机,一种是只炸上半菱形,一种是炸整个菱形.问所有区域内的所有格子的异或和. 思路:用前缀和思路: 这样遍历过去就完成了一次 ...
- LeetCode练习2 两数相加
问题如下: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...
- ubantu下Navicat乱码的问题
在官网下载的最新版的Navivat12出现的乱码情况 解决方法:Navicat的文件夹中找到start_navicat用vim编辑,在export LANG=“en_US.UTF-8”这句话改为exp ...
- Quartz动态添加定时任务执行sql(服务启动添加+手动添加)
系统用来每天插入视图数据... 一.数据库表设计 1.接口配置表(t_m_db_interface_config) 2.接口日志表(t_m_db_interface_log) 3.前端配置页面 查询页 ...
- Android自定义相机拍照并使用CardView展示
直接上完整代码:在Android Studio新建一个项目,然后依次创建: 1.预先在drawable文件夹中保存的图片资源 2.创建:CameraPreView.java类: 3.创建:OnClic ...
- 串行FLASH文件系统FatFs---转自野火论坛
为了支持长文件名,需要用到FATFS源码中的cc936.c的两个函数ff_convert,ff_wtoupper:这里面直接用了两个大数组(127KB)来做unicode转gbk(OEM)的对照表,这 ...
- 两篇 Spring 总结(一)
Spring4 概述以及 HelloWorld 概述 Spring 是一个 IOC(DI) 和 AOP 容器框架. 轻量级,Spring 是非侵入的,即使用的时候不需要实现任何接口或继承任何父类 面向 ...