首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
编程语言
> 详细
java面向对象
时间:
2016-05-06 15:27:48
阅读:
220
评论:
0
收藏:
0
[点我收藏+]
标签:
面向对象的思想概述
:
l
程序员从执行者转化成了指挥者。
l
完成需求时:
?
先去
找具有所
需功能
的对象来
用。
?
如果该对象不存在,那么创建一个具有所需功能的对象。
?
这样简化开发并提高复用。
l
类
(class)
和
对象
(object)
是面向对象的核心概念。
?
类是对一类事物描述,是
抽象的
、概念上的定义
?
对象是实际存在的该类事物的每个个体,因而也称
实例
(instance)
。
对象在内存中的图解:
成员变量跟局部变量的两个主要的区别:
1.声明的位置的不同 :成员变量:声明在类里,方法外
* 局部变量:声明在方法内,方法的形参部分,代码块内
2 初始化值:成员变量:如果在声明的时候,不显式的赋值,那么不同数据类型会有不同的默认初始化值。
局部变量:一定要显式的赋值。(局部变量没有默认初始化值)
3 二者在内存中存放的位置不同:成员变量存在于堆空间中;局部变量:栈空间中。
对数组操作的几个方法:
// 数组的反转
public int[] reverse(int[] arr) {
for (int x = 0, y = arr.length - 1; x < y; x++, y--) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
return arr;
}
// 对数组进行排序
public void sort(int[] arr, String desc) {
if (desc == "asc") {// ascend:从小到大
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr,j,j+1);
//swap(arr[j],arr[j + 1]);
}
}
}
} else if (desc == "desc") {// 从大到小
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
swap(arr,j,j+1);
//swap(arr[j],arr[j + 1]);
}
}
}
} else {
System.out.println("您输入的排序方式有误!");
}
}
* 方法的重载
(overload)
* 要求:1.同一个类中 2.方法名必须相同 3.方法的参数列表不同(①参数的个数不同②参数类型不同)
* 补充:方法的重载与方法的返回值类型没有关系!
对于方法的可变参数
:
/*
* 可变个数的形参的方法:
* 1.格式:对于方法的形参: 数据类型 ... 形参名
* 2.可变个数的形参的方法与同名的方法之间构成重载
* 3.可变个数的形参在调用时,个数从0开始,到无穷多个都可以。
* 4.使用可变多个形参的方法与方法的形参使用数组是一致的。(两个不可以同时存在)
public void sayHello(String ... args){
for(int i = 0;i < args.length;i++){
System.out.println(args[i] + "$");
}
//System.out.println("=====");
}
public void sayHello(String[] args){
for(int i = 0;i < args.length;i++){
System.out.println(args[i]);
}
}
上述情况,会报错。
用可变参数调用时,可以t.sayHello(new String[]{"hello China","hello BeiJing"});
也可以 t.sayHello("hello China","hello BeiJing");
* 5.若方法中存在可变个数的形参,那么一定要声明在方法形参的最后(可变参数形参只能声明在方法参数的最后)
* 6.在一个方法中,最多声明一个可变个数的形参。
java方法中的参数传递
:
* 方法的参数传递(重点、难点)
* 1.形参:方法声明时,方法小括号内的参数
* 实参:调用方法时,实际传入的参数的值
*
* 2.规则:java中的参数传递机制:值传递机制
* 1)形参是基本数据类型的:将实参的值传递给形参的基本数据类型的变量
* 2)形参是引用数据类型的:将实参的引用类型变量的值(对应的堆空间的对象实体的首地址值)传递给形参的引用类型变量。
面向对象的特征一:封装与隐藏
* 问题:当创建了类的对象以后,如果直接通过"对象.属性"的方式对相应的对象属性赋值的话,可能会出现不满足实际
* 情况的意外,我们考虑不让对象来直接作用属性,而是通过"对象.方法"的形式,来控制对象对属性的访问。实际
* 情况中,对属性的要求就可以通过方法来体现。
*
* 解决的方法:(封装性的思想)①将类的属性私有化,②提供公共的方法(setter & getter)来实现调用。
*
* 二、权限修饰符:public private 缺省 protected
* 可以用来修饰属性、方法
* 注:1)权限从大到小排列:public protected 缺省 private
* 2)修饰类的权限有:public 缺省
用来限定该类对象对该类成员(成员变量,方法等)的访问权限。
*
一、类的第三个成员:构造器(constructor 构造方法)
* constructor:建造者
* 构造器的作用:①创建对象 ②给创建的对象的属性赋值
*
* 1.设计类时,若不显式声明类的构造器的话,程序会默认提供一个空参的构造器
* 2.一旦显式的定义类的构造器,那么默认的构造器就不再提供。
* 3.如何声明类的构造器。格式:权限修饰符 类名(形参){ }
* 4.类的多个构造器之间构成重载
*
*
* 二、类对象的属性赋值的先后顺序:①属性的默认初始化 ②属性的显式初始化③通过构造器给属性初始化
* ④通过"对象.方法"的方式给属性赋值
this关键字
:
* 1.可以用来修饰属性、方法、构造器
* 2.this理解为当前对象或当前正在创建的对象.比如:this.name,this.show();(在构造器中使用this表示当前正在创建的对象)
*
* 3.可以在构造器中通过“this(形参)”的方式显示的调用本类中其它重载的指定的构造器。
* 要求:1.在构造器内部必须声明在首行!
* 一、面向对象的特征二:继承性
* 1.为什么要设计继承性?
*
* 2.通过"class A extends B"类实现类的继承。
* 子类:A 父类(或基类 SuperClass):B
*
* 3.子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
* 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接
* 调用罢了。
* 子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。
*
* extends:子类是对父类功能的“扩展”,明确子类不是父类的子集。
*
* 4.java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类。
* 二、方法的重写
---(方法的重载) 修饰符 返回值类型 方法名 (参数列表){}
* 1.前提:有子类继承父类
* 2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(override overwrite)、覆盖、覆写。
* 3.重写的规则: 1)要求子类方法的“返回值类型 方法名 (参数列表)”与父类的方法一样
* 2)子类方法的修饰符不能小于父类方法的修饰符
* 3)*若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的。
* 4)*子父类的方法必须同为static或同为非static的。
5)private 方法子类是不可见的,因此也不存在重写。子类中若有个这样的 private 方法,那这个方法与父类中的那个没有任何关系,是完全独立的。
super关键字:
l
在
Java
类中使用
super
来调用父类中的指定操作:
?
super
可用于访问父类中定义的属性
?
super
可用于调用父类中定义的成员方法
?
super
可用于在子类构造方法中调用父类的
构造
器
l
注意:
?
尤其
当子父类出现同名成员时,可以用
super
进行
区分
?
super
的追溯不仅限于直接父
类
?
super
和
this
的用法相像,
this
代表本类对象的引用,
super
代表父类的内存空间的标识
(如果父类和子类中有同名的变量,则子类会有两个变量)。
* 3)super修饰构造器:通过在子类中使用“super(形参列表)”来显式的调用父类中指定的构造器。
* >在构造器内部,“super(形参列表)”必须要声明在首行!
* >在构造器内部,“this(形参列表)”或“super(形参列表)”只能出现一个!
* >当构造器中,不显式的调用“this(形参列表)”或“super(形参列表)”其中任何一个,默认调用的是
* 父类空参的构造器!
* 建议:设计一个类时,尽量要提供一个空参的构造器!
l
子类中所有的
构造
器
默认
都会访问父类中
空参数
的
构造
器
l
当
父类中没有空参数的
构造
器
时
,子类的
构造
器
必须
通过
this(
参数列表
)
或者
super(
参数列表
)
语句指定调用本类或者父类中相应的构造
器
,且
必须放在构造器的第
一行
l
如果子类构造
器
中既未显式调用父类或本类的构造
器
,且父类中又没有无参的构造
器
,则
编译出错
(总之:子类对象的创建,一定会调用父类的构造器。)
子类对象实例化的过程:
会首先调用子类对象的所有直接父类和间接父类的构造器,由上到下,依次执行,然后再调用自己的构造器。
* 面向对象的特征三:多态性
* 1.多态性指的是什么?多态性,可以理解为一个事物的多种表型形态。
* 1)方法的重载与重写 2)子类对象的多态性(父类引用指向子类对象)
虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
3.程序运行分为编译状态和运行状态。
* 对于多态性来说,编译时,"看左边",将此引用变量理解为父类的类型
* 运行时,"看右边",关注于真正对象的实体:子类的对象。那么执行的方法就是子类重写的。
4.子类对象的多态性,并不使用于属性。
父类和子类中有同名的变量,然后父类引用指向子类对象时,引用调用该变量时,是调用的父类的。
(方法子类可以重写或者说是覆盖,所以多态执行子类的方法,但是变量不存在覆盖的情况,子类中会有两个同名的变量,由于是父类的引用,所以调用时,会调用父类的变量。)
java面向对象
标签:
原文地址:http://blog.csdn.net/hangshuai799/article/details/51323624
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
Spring Cloud 从入门到精通(一)Nacos 服务中心初探
2021-07-29
基础的排序算法
2021-07-29
SpringBoot|常用配置介绍
2021-07-29
关于 .NET 与 JAVA 在 JIT 编译上的一些差异
2021-07-29
C语言常用函数-toupper()将字符转换为大写英文字母函数
2021-07-29
《手把手教你》系列技巧篇(十)-java+ selenium自动化测试-元素定位大法之By class name(详细教程)
2021-07-28
4-1 YAML配置文件 注入 JavaBean中
2021-07-28
【python】 用来将对象持久化的 pickle 模块
2021-07-28
马拉车算法
2021-07-28
用Python进行冒泡排序
2021-07-28
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!