既然Java是面向对象的语言,总该写篇文章讲讲什么是面向对象(Object Oriented,OO)。
首先我们得先了解一下Java的类和对象。
什么是类##
自人类文明诞生开始就会对这个世界的事物进行分门别类,任何事物都可以根据需要被划分在某个分类下。例如生物界就有“界门纲目科属种”之分。而Java重现了这个习惯对事物进行分类。在Java中,根据程序逻辑的需要把事物的属性和行为提取出来抽象成一个一个的类(class)。例如人、电脑、汽车、空气、歌曲、国家、法律等等等等。而且不限于现实世界存在的种类,只要程序逻辑上需要可以天马行空自行想象。例如数据库操作里经常有个叫DBHelper的类,它的作用就是把Java程序和数据库进行连接。这种类在现实世界就没有对应的实体。
属性与方法######
事物的属性和行为对应类的成员变量(在Java不叫全局变量)和方法(在Java不叫函数)。
- 成员变量
就是指属性(口头上也是叫属性多点),用于保存类的状态。例如影视明星有姓名、性别、年龄、身高、体重、人气值等等属性。
属性的本质是为了内存复用,例如在明星类划出一块存储姓名,然后用变量名指向这块内存区域。若需要再次访问姓名这个属性通过变量名引用对应的内存区域即可。
示例代码:
public class Star {
String name; //姓名
String sex; //性别
int age; //年龄
int height; //身高
int weight; //体重
int popularity; //人气值
}
- 方法
事物的行为在类里被称为方法。表现为能完成某些功能的代码段。例如人能吃能喝能睡,汽车能跑,空调能制冷。明星有唱歌、撕逼等方法。
方法的本质是为了代码复用。可以在别的地方通过方法名重复使用代码。
示例代码:
public class Star {
String name; //姓名
String sex; //性别
int age; //年龄
int height; //身高
int weight; //体重
int popularity; //人气值
//唱歌
public void sing() {
System.out.println("北京的朋友们,你们好吗?");
System.out.println("让我看到你们的双手。。");
System.out.println("他说风雨中这点痛算什么");
System.out.println("为了你而祈祷而祝福而感动");
System.out.println("。。。");
popularity += 10;
}
//撕逼
public void siBi() {
System.out.println("感谢生命让我遇见你,我真是幸运,爱你一辈子");
System.out.println("感谢粉丝,我们想过正常人生活,求祝福");
popularity += 20; //人气大涨,当红小生
System.out.println("马丹,丫劈腿了");
popularity += 20; //抢占头条,汪峰哭晕在厕所
System.out.println("最近忙着公益,没怎么看新闻,万万没想到。。。这里澄清一下");
popularity += 20; //媒体聚焦,全民话题,人气直逼娱乐天团TFBoys。
}
//自我介绍
public void show() {
System.out.println("我叫" + name + ",我目前人气值:" + popularity);
}
}
每一个类可以看做一种自创的数据类型,而且是引用数据类型。通常一个类一个java文件,但是也可以把多个类写在一个java文件里,但是编译后会生成多个class文件。
示例代码:
public class Test {
public static void main(String[] args) {
System.out.println("这个java文件有三个class");
}
class Test2 {
}
}
class Test3 {
}
上面的代码里有三个class,编译后会生成三个class文件。
什么是对象##
程序员像个造物主一样为自己的程序抽象出各种类之后。还需要用这些类当模板去创造实例。例如有了人这个类,就可以去生成李晨、范冰冰、张燕这些实例。这个过程叫做实例化,这些实例就叫做对象。再例如,美剧是一个类,《权利的游戏》、《纸牌屋》、《硅谷》是具体的对象。
- 怎么通过类实例化出对象?
Star zhangChenBing = new Star();
- 怎么通过对象调用累的属性和方法
zhangChenBing.name = "张晨冰";
zhangChenBing.show();
上面的示例代码有一个Star类定义了明星。我们可以用一个类来作为程序主体。
示例代码:
public class ClassAndObject {
public static void main(String[] args) {
Star zhangChenBing = new Star();
zhangChenBing.name = "张晨冰";
zhangChenBing.sex = "女";
zhangChenBing.age = 28;
zhangChenBing.height = 170;
zhangChenBing.weight = 55;
zhangChenBing.popularity = 10;
zhangChenBing.show();
System.out.println();
zhangChenBing.sing();
System.out.println();
zhangChenBing.show();
System.out.println();
zhangChenBing.siBi();
System.out.println();
zhangChenBing.show();
}
}
运行结果:
<pre>
我叫张晨冰,我目前人气值:10
北京的朋友们,你们好吗?
让我看到你们的双手。。
他说风雨中这点痛算什么
为了你而祈祷而祝福而感动
。。。
我叫张晨冰,我目前人气值:20
感谢生命让我遇见你,我真是幸运,爱你一辈子
感谢粉丝,我们想过正常人生活,求祝福
马丹,丫劈腿了
最近忙着公益,没怎么看新闻,万万没想到。。。这里澄清一下
我叫张晨冰,我目前人气值:80
</pre>
什么是面向对象##
“对象”刚说了,我们来说说“面向”这个词。我刚想了一会,有没有哪个词汇可以代替“面向”呢?例如“面对”?“针对”?或者“围绕”?想来想去还是觉得“面向”本身就已经很见名知意了。它的意思就跟小时候学校墙上涂的“教育要面向现代化,面向世界,面向未来”的面向是一个意思。
虽然“面向对象”这四个字没有类,但是还是得从类说起。我们的程序里要想想逻辑里需要哪些事物,还需要想要用到这些事物的哪些属性和行为。然后拥有共同特性的抽象成一个一个的类。有了类再去生成对象。所谓面向对象,就是强调属性和行为与对象的捆绑。程序运行过程是对象之间进行数据传递和相互作用。和任何事物都能抽象成类一样,任何事物也能实例化成对象。一切看你需要,你就是你的程序的上帝。Java文化里有句名言叫“一切皆是对象”,就连JVM也是对象。每运行一个Java程序你的电脑就实例化出一个新的JVM对象。有几个Java程序在运行就有几个JVM对象。
面向对象三大特征##
面向对象三大基本特征是:封装、继承、多态。
先把这三个词抛出来混个脸熟,回头我每一个都会单独写一篇文章。
本文所用代码:百度网盘
网友评论