面向对象和面向过程的本质区别
面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。举个简单例子,当你想造一辆车的时候,你应该要思考的是,车主要是由发动机底盘,轮子,变速器构成,我应该寻找到这些基本部件,然后把他们组装起来,最后,造出一辆可以 使用的汽车,这个就是面向对象的思维方式,而面向过程的思维方式,则是,我应该先造一个发动机,如何造,怎么造,需要哪些图纸和材料,这些都是我需要自己慢慢来的过程。但是从另一个方面来讲,这个面向对象在组装的过程中,其实也是面向过程的一种方式。
面向对象有一个非常重要的设计思维:合适的方法应该出现在合适的类里面。就比如发动机的轴承属性,绝对是在发动机的图纸里面拥有,绝对不会出现在变速器的图纸上。
对象和类的概念
对象是用于计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性。
类是用于描述同一类的对象的一个抽象的概念,类中定义了这一类对象所具有的静态属性和动态属性
类可以看成一类对象的模板,对象可以看成该类的一个具体实例。具体一点来说,类是我们对一个事物所拥有的属性和方法的抽象表示,比如,脸可以抽象成:一个平面有两只眼睛,两只耳朵,两个鼻孔一个嘴巴的部位,可以吃饭,呼吸…这就是脸的类,当我们需要使用这个类的时候,我们需要实例出它,比如,一个长在人身上的脸,这就是人脸,如果是长在猴子身上的脸,那就是猴脸,一个类,可以构出不同的对象。
封装
封装一个类,一般使用private这个标识符,目的是为了防止外部的程序,破坏掉原有的类的内部联系,和属性,主要是为了数据的安全性,在实际程序中一般使用get,set方法来作为外部调用内部属性的方法。
继承
继承关系封装了这样一种逻辑:“XX是一种XX”,只要这东西能说通了,就可以考虑用继承关系来封装它。如:游泳运动员从运动员继承,游泳运动员是一种运动员,这能说得通,所以游泳运动员就是从运动员继承过来的,游泳运动员和运动员就是一种继承关系。学生是一个人,学生从人继承,老师是一个人,老师也从人继承,学生是一种老师,这说不通,所以学生和老师就不存在继承关系。所以将来做设计的时候要分清继承关系很简单,你只要说通这么一句话:“XX是一种XX”。OK,那他们之间就是继承关系。
多态(一直有点概念不清,理一下)
- A:多态(polymorphic)概述
事物存在的多种形态 - B:多态前提
a:要有继承关系。
b:要有方法重写。
c:要有父类引用指向子类对象。 - C:案例演示
代码体现多态
public class TestAnimal {
public void bite() {
}
public static void main(String[] args) {
TestAnimal A = new Cat();
TestAnimal B = new Dog();
A.bite();
B.bite();
}
}
class Cat extends TestAnimal {
public void bite() {
System.out.println("This is Cat:MiaoMiao is bitting");
}
}
class Dog extends TestAnimal {
public void bite() {
System.out.println("This is Dog:WangWang is bitting");
}
}