一.面向对象概念
c++、c#、java都是典型常见的面向对象的语言。面向对象是基于面向过程的思维方式,比如:要看电视的时候,自己亲自手动换台,远程遥控器换台;开车去目的地,需要查询路线,自己开车。而如果请一个专业的司机,将一切交给他,自己坐车就行,这就是面向对象。司机就是一个对象,你只需要将现实中的行为(方法),属性(变量)规定好,让对象去执行调用就行。
二.类与对象
Ⅰ.概念
类(class)是抽象的,看不见摸不着的,是一种对现实中事物的描述。而对象是具体的,可以看见摸着的实体。
比如:iPhone手机,如果说一个型号的就是一个类。它们出场的时具有共同的属性(尺寸,厚度,颜色等),也就是我们说的规格。但是在产品出场前,所有规格只是写到规格单上。我们看不见事物,因为手机还没生产出来,对iPhone只存一些设想意义上的概念。
对象(object)是什么?具体的,看的见摸得着的事物。比如:出场后的iphone手机,每一台就是一个对象。假设生产100台iPhone手机,编号为1-100。那么对象就有100个,我们可以把他们命名为iPhone1、iPhone2、iPhone3、……iPhone100。
生产手机在程序里就是一个创建对象(实例化)的过程,工程师们拿到生产规格单(属性/变量),和功能介绍(方法)后,就可以开始无限量的的生产实体对象。当然只要车间够大,内存够足,我们就可以马不停蹄的加工了。
比如:Iphone iphone1=new Iphone;
Iphone iphone2=new Iphone;……
Iphone iphone100=new Iphone;
这里我们就成生产了一百台iPhone手机。
在类当中我们把属性和方法统称为成员,属性也称作变量,方法专业的说法叫做函数。
让我们来看一个例子:
class Person{
String name="yowu kowu";
int age=24;
//无参数无返回值
void eat(){
System.out.println("吃饭");
}
}
public class Someone{
public static void main(String[] args){
Person one=new Person();
System.out.println(one.name);
one.eat();
}
}
这就是一个对象调用类成员的典型例子。我们可以事先统一好规格,手机的所有属性方法,也可以只声明然后去用每个对象生成每个对象自己的成员。
例如:
class Person{
String name;
int age;
//无参数无返回值
void eat(){
}
}
class Student extends Person{
void eat(){
System.out.println("学生吃饭");
}
}
public class Someone{
public static void main(String[] args){
Person one=new Person();
one.name="li";
System.out.println(one.name);
Person two=new Person();
two.name="yang";
System.out.println(two.name);
Student there=new Student ();
there.eat();
}
}
特别值得注意的是,对象访问成员属性,当属性为普通属性也就是实例变量时,可以随意更改其数值。而当用static修饰后的静态成员变量却是公用的,任意对象访问调用时,结果为公共变更。普通在类中只声明函数,不写实现代码块的情况下,我们并不能改变其函数的执行实现。但我们可以通过继承父类,重写(override也成为覆盖)父类的方法,然后再调用子类的函数去实现这一目的。
三.三大特性
Ⅰ.继承
继承是子类对父类成员的获取,继承也是对现实事物中一种类与类关系的描述。原则上一定不能为了获取某种成员而随意继承,就像现实中当羡慕别人拥有某种物品,去叫别人爸爸而共享物品。
Ⅱ.封装
封装是在考虑代码安全性的基础上,将部分属性信息隐藏起来。通常在实际代码中,我们会设置一个set和get的方法,实现封装属性的调用。
Ⅲ.多态
多态顾名思义,是指的事物的多种形态表现。在代码中,多态是在继承的基础上所得以展现的。多态的法则:父类 引用=new 子类();子类实例对象去调用父类方法。
好比:
现实中,比如我们按下 F1 键这个动作:
如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
如果当前在 Word 下弹出的就是 Word 帮助;
在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。