面向对象的三个重要概念

在结构化的编程中,主要是通过一系列的过程(算法)来解决问题,一旦这些过程确定就得考虑存储数据的方式,所以大师们把面向过程的程序设计概括为“程序=算法+数据结构”,所以面向过程的设计中首先考虑如何操作数据,然后在考虑数据的存储,以便于如何简单的操作数据;而在OOP(面向对象)的设计中恰恰相反,先是考虑数据结构的设计(类的设计),然后再考虑数据的操作。在面向对象的设计中主要以下概念需要理解:
1:类和对象
在面向对象的设计中。基本上是在类的基础上设计,所有的方法的变量都被类包围。在这里有一句典型描述类和对象的话----[b]“类是构造对象的模板和蓝图”[/b],所以对象就是通过类的构造方法创建出来的一个实例罢了,对于对象来说,[b]"封装"[/b]---也是一个比较重要的概念,从形式上看是将数据和行为组合在一个包中,并对对象的使用者影藏了数据的实现方式,对象中的数据即实例域,操纵数据的过程叫做方法,对于每一个特定的实例(对象)都有一组特定的实例域值,这些值的结合就是对象的当前状态,无论何时,只要向对象发送一个消息,他的状态就有可能发生变化。[b]构造器[/b]:在编写一个类的时候如果没有编写构造器,那么系统会提供一个默认的构造器,默认构造器会把所有的变量设置默认的初始值,如boolean值为false,int值为0,String类型为空串,对象类型为null,注意在这里所说的默认的构造函数是指没有显示编写构造函数的前提下,如果在有显示的构造函数的情况下,而且也没有编写空的构造函数,那么默认的构造函数是不存在的。

2:抽象类
从某种角度看,祖先类更加通用,人们只将它作为派生其他类的基类,而不是作为想使用的特定的实例,所以出现了[b]抽象类[/b],在这里讲述一个抽象类引入的实例,如果两个类同时继承于一个类,现在我们想在这两个类中实现一个公共的通用的方法,那么如果我们在父类中添加一个空实现的方法让两个继承并重写里面的实现就是了,但是我们这里有一个不用空实现的方式,就是用abstract来修饰我们的方法,而不用去空实现。所以有如下的规定:
[b] a:[/b]包含一个或者多个抽象方法的类本身必须被申明为抽象的;
[b] b:[/b]除了抽象方法外,抽象类还可以包含具体的数据和具体的方法,建议只将通用的方法放在超类中;
[b] c:抽象类充当着站位的角色,他的具体实现在子类中[/b];
[b] d:[/b]类即使不含抽象方法,也可以将类申明为抽象类;
[b] e:[/b]抽象类不能被实例化(虽然可以写构造方法),[b]注意:[/b]抽象类和接口不一样,抽象类也是类,他具有类的大部分特征,它有实例域和构造函数,因为继承就是继承父类的数据和方法还有父类的构造函数,但是由于抽象的特殊含义,他不能被实例化;抽象类可以实现接口也可以继承其他抽象类或者普通类。
[b] f:可以不实现抽象类的所有抽象方法,这样的话子类也必须是抽象方法,否则就全部实现抽象方法[/b]
[b] g:[/b]可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象Person person = new Student()
[b] h:[/b]由于不能构造抽象类的对象,所以抽象类的变量永远不会引用抽象类的对象,而是引用具体子类对象,如:
Person[] people = new Person[2];
people[0] = new Student(...);
people[1] = new Teacher(...);
for(Person p : people){
System.out.println("name"+p.getName()+";描述"+p.getDescription());
}
3:接口
在了解接口的时候,我觉得这句话很经典:[b]接口不是类,而是对类的一组需求的描述,如果类遵从某个接口,那么就履行这项服务[/b],在接口中有一些约定的东西:
a> 接口中的所有方法和属性都自动的属于public,所以在接口申明的时候不必提供关键字public,在这里我是这样理解的,接口定义的服务时需要类的履行的,所以需要时公开的。
b> 接口决不能含有实例域,也不能在接口中实现方法,因为接口只是类的需求的描述,所以不能实现方法。
c> 接口中不包含默认的构造方法,也不能提供构造方法,所以她是没有实例的,因为只是描述,也没有对描述这个抽象的东西来一个实例吧。
d> 接口不能继承类,因为继承就会继承够着方法,继承就需要实现方法;接口可以实现接口,用关键字extends,其实接口实现接口主要是实现接口的组合,即1+2=3的关系。
e> 虽然接口中不能包含实例域和静态方法,但是却可以包含常量如:int a = 2;系统会自动的转换为public static final a = 2.在实现此接口的对象也继承了此类常量,可以在类中直接引用。这种实现方式似乎违背了接口的设计初衷,所以建议不这样写。
f> 虽然所有类只能有一个超类,但是可以实现多个接口。
g> 接口不是类,尤其不能用new运算符实例化一个接口,然而尽管不能构造接口的对象,却能申明接口的变量,但是接口变量必须引用实现了接口的类对象,他也可以用instanceof来检测是否是实现那个接口,而对于接口的遍历等等实例和抽象类差不多,可以参考抽象类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值