面向对象

来源:互联网 发布:python开发聊天机器人 编辑:程序博客网 时间:2024/06/04 19:14

1、面向对象编程是把属性和行为都封装在相对应的类中,在类实例化成对象后再调用其对外提供的的方法,这样便于代码的维护和程序的拓展。

面向对象编程举例:把大象装冰箱

采用面向对象对冰箱类进行封装:

class 冰箱{

//冰箱属性:

String 品牌
double 价格;
double 重量;
//方法
public boolean 打开冰箱(){
if(冰箱已经打开){
return true;
};
return false;
}
public boolean 把大象放进去(){
if(大象放已经进去){
return true;
};
return false;
}
public boolean 关闭冰箱(){
if(冰箱已经关闭){
return true;
};
return false;
}

}


2、面向对象有封装、继承、抽象、多态4个主要的特征

封装:隐藏对象的属性和实现细节,仅对外面提供公共访问的方式

封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的高内聚、低耦合,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个模块中,也就是一个类中,属性用变量定义,为用方法进行定义,方法可以直接访问同一个对象中的属性。通常情况下,只要记住让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己方法才可以访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个类上的方法了,就基本上算是会面向对象的编程了。把握一个原则:把对同一事物进行操作的法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类中。

封装原则:

(1)将不需要对外提供的内容都隐藏起来

(2)对外提供可供调用方法

抽象:抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。

例如,看到一只蚂蚁和大象,想象出它们的相同之处,那就是抽象。抽象包括行为抽象和状态抽象两个方面。例如,定义一个Person类,如下:

class Person

{

String name;

int age;

}

class Person

{

String name;

int age;

}

人本来是很复杂的事物,有很多方面,但因为当前系统只需要了解人的姓名和年龄,所以上面定义的类中只包含姓名和年龄这两个属性,这就是一种抽像,使用抽象可以避免考虑一些与目标无关的细节。我对抽象的理解就是不要用显微镜去看一个事物的所有方面,这样涉及的内容就太多了,而是要善于划分问题的边界,当前系统需要什么,就只考虑什么。

继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。

多态:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。

多态(动态绑定)满足3个条件:

1,要有继承关系;2要有重写;3,父类引用指向子类对象

多态实例:

/**
* 定义一个基类
*/
public Class Parents {
   public void print() {
     System.out.println(“parents”);
}
}
/**
* 定义两个派生类
*/
public Class Father extends Parents {
   public void print() {
     System.out.println(“father”);
}
}
public Class Mother extends Parents {
   public void print() {
     System.out.println(“mother”);
}
}
/**
* 测试输出结果的类
*/
public Class Test {
   public void find(Parents p) {
     p.print();
}
public static void main(String[] args) {
   Test t = new Test();
   Father f = new Father();
   Mother m = new Mother();
   t.find(f);
   t.find(m);
}
}

最后的输出结果分别是father和mother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用那个派生类的方法,就是因为程序在运行时进行了绑定

------- android培训java培训、期待与您交流! ----------