“面向对象”的编程思想
那么,何为面向对象的编程思想呢
首先哈,这东西,不是你一下子就能顿悟滴,而是渐悟出来滴。可能大家听完这个后便觉得自己明白了,但是回头一想,好像什么都妹明白,一直处于这种状态。直到你不断的去写这个Java代码,在这个写的过程当中,你便会渐渐领悟了。你就会发现,原来的你写的那种Java代码就是面向对象编程。
说到这个面向对象哈,就要再来谈谈面向过程,咱们做个比较。
面向对象(OOP)与 面向过程(POP)
咳咳,这两者呢,都是一种编程思想。但是面向对象是相对于面向过程而言的。面向过程,强调的是功能行为。而面向对象呢,是将功能封装进对象,强调具备了功能的对象。
举个例子哈。 我们用两种思想来编写 打球
面向过程:那我们只需要编写出打球的动作,这个打球是如何完成的。
面向对象:我们便需要考虑这个打球的动作是归属于谁的,所以我们就会出现一个人的对象,人的对象中包含 了有个打球的动作。
我知道你肯定又要问,这样编写好处在哪里,这里咋就不说了,以后你自然就会明白。
面向对象的三大特性
那就是 封装、继承、多态
至于其意义,后面会详细说明哈!
Java类以及类的成员
- 现实世界万事万物都是由分子和原子构成的,同样呢,Java代码世界,也是由许许多多个不同的类class组成的。
- 现实中这些个分子、原子都是由原子核、电子构成的。那木呢,Java中的类class也是由两种成员构成的,分别是:属性、行为
属性(Field):对应类中的成员变量。
行为(method):对应类中的成员方法。(也是大家经常写的函数,这个函数就是方法,也称行为)
那木,我们要如何以面向对象的思想来编写一个Java类呢,这里我们就举个例子。
比如: 英俊的我要开车去网吧!
咳咳,我们可以看出来哈,这句话中有两个类class,一个是我 ,一个是车
//首先我们写 我 类
我{
//这句话中,我有会开车这个动作,还有就是我的形容 是英俊的,那木我们就得定义一个属性一个方法。
String 模样 = “英俊的” ;
开车(网吧){ //里面是要有个参数的,就是我们开车要去哪里
......
}
}
//然后就是 车 类
车{
//车的话,那必须要能启动、前进、停止、倒车。对吧!然后我们就写四个方法,车就能动了。
启动(){
......
}
停止(){
......
}
前进(){
......
}
倒车(){
......
}
}
这样子,就能够完成 英俊的我要开车去网吧! 这个事务了。
可能你不大喜欢看中文的哈,想看完整的代码哈!行,安排!
接下来我们完完全全来建立一个 人 的类
/** 这是文档注释哈!要养成经常打注释的喜欢哈。
* 对人的类进行一次完整的编写。
* @author Jun木~
*
*/
public class Person { //注意哈!类以及接口必须要首字母大写哈!
//我们要知道名字吧,还有年龄,有木有结婚呀啥的,这些,就是属性
String name ; //在类下定义的变量就叫成员变量
int age;
boolean married; //这是布尔类型定义,参数只有 是 或者 否 !
//然后就是方法,我们就写个显示名字,和获取年龄吧!
public void showNmae() {
//注意:方法和变量如果有两个单词以上的话,从第二个单词开始就要首字母大写
int i; //在类的方法中定义的变量,叫做局部变量
System.out.println(name);
}
public int getAge() {
//注意:当一个方法有返回值的时候,方法类型就要写数据类型,如何没有返回值,就写void
return age;
}
}
咳咳,这样子,一个 人的类 就这样建立好的了。
这里哈!再教你一个输出快捷键,就是在eclipse中 输入 sysou 然后再按下 Alt + / 就能够快速的输出 System.out.printfln();
咳咳,记得亲自尝试哈,看是没有用滴。好滴,接下来就是实例化啦!
Java实例化
什么叫做实例化呢?
咳咳,你可能听说过这么一个段子,就是有Java程序员听有人在说没有对象,然后 这个程序员就说,不就是对象蛮,new一个不就有了。 这里的new就是我们要讲的Java实例化,也叫作 创建一个对象。
这个实例化呢,感觉起来和C语言里面的函数调用有点像,但又不完全是。
首先呢, 我们需要一个类来进行实例化,我们就用上面那个 人的类 哈!
Person类实例化解释
- 首先,我们使用Person p1 = new Person(); 创建一个对象,我们这个对象的名字呢就叫p1;
- 由上面的Person类,我们可以知道里面的属性有name、age;方法有showName、getAge;
- 使用p1.name = “阿木木”; 所以p1对象的name属性就叫做 阿木木 ,并使用showName将其打印出来
- 然后定义一个变量i 来获得p1对象的年龄,但为什么是 0 呢,因为在我们写Person类的时候并没有给年龄赋值,那么整形变量的默认值就是 0 ;这个默认值我觉得还是有必要写下的;安排!
当类成员变量没赋值时默认值
数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0D |
char | ‘\u0000’,也就是空,显示效果就是一个空格 |
boolean | false |
引用类型String | null |
匿名对象
那木,啥叫做匿名对象呢,还是按照上面Person类做例子。
我们前面实例化的时候,是创建了一个对象,他的名字叫做 p1 ;相当于给对象起了一个名字,那木匿名对象呢,就是没有这个名字,使用时,是直接调用里面的方法,例如:new Person().showName(); 这样子,就是直接使用对象。
那木我们啥情况会用到匿名对象呢?
一、当这个类的方法我们只需要使用一次,然后以后就再也不管了,我们就适合使用匿名对象。
二、还有一种呢,就是,我们经常将匿名对象作为实参传递给一个方法调用。
害,还是举个例子, 我们要计算圆的面积 这个时候我们只需要调用一次就行了。
首先我们先写一个圆的类;
public class circle {//只计算圆的面积,我们就只要写一个方法就好了;
public double area(double r) {//r为半径,数据类型都是double
return 3.14 * r * r;
}
}
然后,定义一个变量s,直接通过匿名对象的方式调用这个方法,再用是记住,然后返回出来。
方法的重载
啥是方法的重载呢?
就是哈,在一个类里面出现了多个同名的方法,在一个类里面共存了。等等,等等,这个时候你一定会问我了,同一个类里面怎么可能会出现同名字的方法呢,在这里哈,本木木就告诉你哈,在Java里面是可行滴,但是有一个前提,里面的参数的个数或者数据类型,是不可以相同的。
这样的同名方法叫做方法的重载。
害,可能你还是一蒙一蒙滴,举个例子吧!
public int add(int a, int b) {
return a + b;
}
public double add(int a, double b) {
reutrn a + b;
}
public double add(int a, double b, int c) {
reutrn a + b + c;
}
//就想这个样子,他们是可以共存在一个类里面的,这也是和C语言的区别吧。
//开始的时候本木木也方了,毕竟木木也是C语言上来的
好啦好啦,今天就先到这吧!!
记得哈,看是学不会滴,只有亲自动手去实验,出结果,那才是自己的。