java学习——品尝OO的味道(一)
这两天刚开始学习java语言,当看完马士兵讲的java中的面向对象之后,有种豁然开朗的感觉,内心充满了欢喜,因此,在这里跟大家分享一下自己的感受。
一、OO三大特性
1、封装
(1)概念
首先说一下封装是什么。很简单,封装就是就是多合一,不是多个东西变为一个东西,而是将多个东西放进一个盒子内。
(2)作用
封装,可以让我们的生活变得更轻松,因为我们把多个东西看作一个东西来用,就可以将复杂的东西变得简单。这样,极大的提高了我们处理事情的效率,方便了我们的生活。
(3)体现
类和对象
说到类,首先就要说一下抽象,抽象是一个很抽象的东西。我把具有相同特征的东西看作一类,这就是一个抽象的过程。比如,自行车、摩托车、小汽车,都是车;而车、轮船、飞机,都是交通工具。到此,我们完成了八次抽象的工作。
下面我们来分解每次抽象。
自行车(有两个轮子,靠人力发动,在陆地上用的);摩托车和汽车略(此为三次抽象)。
车(在陆地上用的,跑的比人快);(此为第四次抽象)
其他略
抽象完了,我们的类和对象也就说完了。那么类是什么,上面抽象出来的东西都叫做类,类就是具备某些共同特征的实体的集合,它是一种抽象的概念。而什么是对象呢?对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。比如:自行车(类),王刚的自行车(对象),刘强的自行车(对象)。
总之,对象是现实世界真实存在的某个物体,而类是我们将具备某些共同特征的物体封装成一个集合(虚构的),然后抽象出一个名词。由此,我们可以看出,抽象是一种特殊的封装。
包
包是什么, 包在我们生活中很常见,包就是一个容器,可以用来装东西。而在Java中为了更好地组织类,提供了包机制。
包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。Java中的包一般均包含相关的类,例如,所有关于交通工具的类都可以放到名为Transportation的包中。
由此可见,Java中的包是用来装类的容器,也就是说用包来封装类。将具有相同名称,但是功能却不同的类,封装在不同的包中,可以方便我们使用,避免造成混乱。
Java中的包要注意以下几点
2、继承
(1)概念
继承,跟我们平时理解的一样——子承父业,是指子类直接使用父类的属性和方法。当然这里边还涉及到访问权限的问题,这个我们以后再说。
(2)作用
继承,可以让我们站在巨人的肩膀,因为一旦继承了某个类,我们就拥有了它的属性和方法,当然我们还可以有自己独特的属性或方法,这样一来,我们可以避免大量的重复工作,而且能够让自己变得足够强大。
当然,继承还有一个特性——牵一发而动全身,如果父类发生改变,那么子类在使用父类的方法的时候,也就发生了改变。因此,我们在使用继承时一定要慎重,用好了,可以使我们软件的灵活性,可扩展性和可复用性提高,用不好,会增加维护工作的难度。
(3)体现
抽象类
由此可见,抽象类是一种特殊的父类。那么什么时候用抽象类呢。当一个对象的行为可以有多种实现方式,在使用该对象的时候,无需详细了解该对象行为的实现方式。也就是说,我们需要把对象的行为和对象的实现分离开来的时候,我们就需要用到抽象类。
构造方法
方法的重写
重写就是改变父类某一方法,让它变成自己特有的方法。其条件是:子类中重写的方法与父类中要重写的方法的名称,参数个数、类型都完全一致。当然,重写之后的使用就要用到我们下边要说的——多态。
3、多态
(1)概念
多态(Polymorphism)按字面的意思就是“多种状态”。在Java中多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
多态,指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针(申明:Java中并没有指针这一说法,但是有引用的地方就会有指针)。
解说:在一般的继承关系中,总是父类给予子类更多的财富,让子类拥有更多的功能,而多态讲的是子类对父类的孝敬。只要将子类类型的指针赋值给父类类型的指针,那么我们就可以把父类当做子类来看待,也就是说,我们可以通过父类来使用子类的方法。这就是所说的父子情深。
(2)作用
继承,让世界充满爱。通过继承和多态,我们可以实例化一个父类对象,把各个子类当做父类的一个状态,当我们需要某个子类的时候,我们就借用指针,来得到相应子类的方法。经过这样处理,我们可以利用父类多态,方便的使用其所有子类的方法,从而使我们面对一个统一的对象(父类)来处理多种状态下的情况。
(3)体现
必要条件
要有继承;
要有重写;
父类引用指向子类对象。
实例
abstract class Animal { abstract void eat(); } class Dog extends Animal { public void eat() { System.out.println("骨头"); } public static void Pao() { System.out.println("跑"); } } class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } public static void cachmouth() { System.out.println("抓老鼠"); } } public class test { public static void main(String[] ats) { eatfunction(new Dog()); eatfunction(new Cat()); } public static void eatfunction(Animal a) { a.eat(); if(a instanceof Cat) { Cat c=(Cat)a; c.cachmouth(); } else if(a instanceof Dog) { Dog d =(Dog)a; d.Pao(); } } }
二、思维导图总结
三、个人感受
学完java的面向对象之后,感觉又被洗礼了一次。在学C++的时候,对这些东西只是有一个浅显的认识,而现在,虽然认识的不是很深刻,但是感觉更加的熟悉了,而且有些东西也能慢慢理解了。
世界上所有的东西都可以看做一个对象,所以我们正处在一个面向对象的世界里,面向对象的思想也就无处不在。也正是因为这样,我们必须学会用面向对象的思想来处理问题,通过面向对象,我们只要了解对象可以干什么就行,而不必去了解对象具体的怎么干,因此,提高了我们的工作效率,使我们的软件具有良好的易扩展性,可维护性等,同时也可以避免大量重复的代码。从而让一个复杂的问题变得简单,让这个世界更加的美好。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。