面向对象基础

来源:互联网 发布:制作照片软件下载 编辑:程序博客网 时间:2024/06/05 00:14

       什么是面向对象编程?就是把万事万物都抽象成为对象,一切都是对象!

什么是抽象?抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较,没有比较就无法找到在本质上共同的部分。     

什么是对象?对象是一个自包含的整体,用一组可识别的特征和行为来标识。

       人是对象,苹果是对象,猫是对象,鸟是对象,总之一切都是对象!对象有属性(域)和行为(方法)。比如人有名字,身高,体重等属性,有吃,喝,玩,思考等行为。

       那怎样创建对象呢?用类来创建。

       类是具有相同的属性和功能的对象的抽象的集合。用class表示。

       面向对象编程很简单,就是定义很多类,然后用类生成对象,并使他们互相通信以完成需要的功能。

       Class Person{

              //定义人的两个属性:名字和年龄

              String name;//人都有名字

              Int age;//人都有年龄

              //定义人的行为:思考

              Public void think(){

                     System.out.println(“人可以思考问题”);

}

}

       有时候我们要初始化类,就必须用到构造方法,构造方法名与类名相同,无返回值。所有类都有构造方法,他是用来初始化类的,上面的类就隐含了一个构造方法:

Public Person(){}

我们可以添上他。如果我们没有定义构造方法,系统默认提供一个无参数的构造方法。如果我们定义了,系统不再定义。可以定义多个构造方法,这叫方法重载(方法名相同,但是参数类型或个数不同)。

       Class Person{

       Public Person(){}

Public PersonString name{}

              String name;//人都有名字

              Int age;//人都有年龄

              Public void think(){

                     System.out.println(“人可以思考问题”);

}

}

面向对象的核心思想是抽象,类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。面向对象有三大特征:封装,继承,多态。

面向对象三大原则之一:封装

什么是封装?每个对象都包含它能进行操作所需要的全部信息,这个特性称为封装。因此对象不必依赖其他对象来完成自己的操作。

封装的好处:

1,              良好的封装能减少类与类之间的耦合  什么是耦合呢?就是类与类之间的关系密切程度。就是藕断丝连,两个类关系越密切,耦合性越高,我们称为强耦合;反之为弱耦合。我们要尽量减少类之间的耦合性,为什么呢?因为两个类关系越密切,我们越难阅读,理解他,从而更难修改,维护他。

我们要为交互对象之间的松耦合设计而努力!如此我们便容易理解,进而扩展维护他们。

2,              类内部的实现可以自由的更改 如果你有多public属性,其他类也引用了他们,你改了他们其他类也同样修改了,这样有时很麻烦。但如果封装的好,只有本类用,我们可以自由更改它,而不用顾忌他引起了其他变化。

3,              类具有清晰的对外接口  其他类可以通过本类提供的public方法(对外接口)与本类进行通信。

封装的实现形式:

1,  类的封装  能不用public修饰符就不用。

2,  属性的封装   所有属性原则上都要用private修饰(考虑到测试等原因可以提高级别)。可提供getset方法设置访问恩,但是get可以提供,set如果没有必要则不提供。

3,方法的封装   首选private,其次protected  default,尽量避免用public

面向对象三大原则之二:继承

对象的继承代表了一种“is  a”关系(是)。比如猫是一种动物,Cat  is a animal,则表明猫类继承动物类,猫是子类,动物是父类。记住三句话:

1.       子类拥有父类非private的属性和行为(方法)。(private表示只能在本类使用)

2.       子类具有自己的属性和行为,即子类可以扩展父类没有的属性和行为。

3.       子类还可以以自己的方式实现父类的功能(方法重写)

继承可以减少重复代码。程序设计中我们应该尽量减少重复冗余的代码,不能来说Ctrl+cCtrl+v的,这是最初级的程序员的做法。而且重复代码越多,越难阅读,越难修改和维护。我们要构建简洁,精炼,封装良好的模块。

继承的好处:使得所有子类公共的部分都放在了父类里,使得代码共享,避免了重复。另外使得修改或扩展都较为容易。

坏处:父类变,子类不得不变。继承破坏了封装,子类和父类强耦合,父类的实现细节暴漏给了子类。

什么时候使用:当两个类之间具备“is  a”关系的时候,就可以考虑用继承了。

如:猫是一种动物,玫瑰是一种花。。。

面向对象三大原则之三:多态

多态表示 是允许将父对象设置成为和一个或多个它的子对象相等的技术。

1.       子类以父类的身份出现  儿子代表老子

2.       子类在工作时以自己的方式进行

3.       子类以父类的身份出现时,子类特有的属性和方法不可以使用。

实现多态必须有:继承,重写,子类引用指向父类。

Father instance = new Son()//instance不能调用son类独有的属性方法。

 

抽象类

1.       抽象类不能实例化

2.       抽象方法必须被子类重写

3.       包含抽象方法的类必然是抽象类

4.       抽象类应该拥有尽可能多的共同代码,以及尽可能少的数据(属性)。

5.       抽象类是用来继承的!具体类不是用来继承的。

接口

1.       接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。

2.       接口的方法没有实现。Interface ITest{void test();}

3.       一个类可以实现多个接口。Class A implemens  I1I2{}

抽象类和接口的区别

1.类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。

接口是对类的局部(行为)进行抽象,不针对属性。抽象类是对类整体的抽象(属性和行为)。他们的共性就是抽象!

2.如果行为跨越不同类的对象,可以使用接口;而对于一些相似的类对象,用继承抽象类。如人类,鸟类,动物类都可以行走,我们可以定义一个接口IWalk实现一个行走的方法,从而人类,鸟类,动物类实现(implemensIWalk,从而拥有走的功能。苹果,桔子,西瓜有很多相同的属性和行为,我们可以定义一个水果的抽象父类。

3.从设计角度讲,抽象类是从子类中发现了公共的东西(苹果,桔子都是水果,都可以吃),泛化出父类,然后子类继承父类;而接口是根本不知道父类的存在,方法如何实现还不确定,预先定义。

       我们先写了几个类,突然发现他们有很多共同的属性和方法,我们于是重构一下,定义一个抽象父类,然后让他们继承父类。

·    通过重构改善现有代码的设计!

原创粉丝点击