JAVA基础知识整理(一)———面向对象的基本概念

*********************************************************************-----我------割-----***********************************************************************

声明:所有资料来源于网络,书本以及本人大脑,经收集、整理、思考而得出。如有侵权,敬请告之。

学无止境、尊重原创、欢迎讨论,转载注明出处,谢谢!

*********************************************************************-----我------割-----***********************************************************************

JAVA基础知识整理(一)———面向对象的基本概念


一、对象(Object)

一 切皆是对象,世界万物都是对象,对象有实体对象:我们能看得见摸得着,比如人,小狗,汽车等等;也有虚的对象:我们看不见摸索不着的,比如定理,思想,事件等等。计算机就把我们现实世界的万物,软件的目的就是为了模拟现实世界,使各种不同的现实世界系统在计算机中得以实现,进而为我们工作、学习、生活提供 帮助。计算机以对象形式进行描述,然后才能进行处理,那采用什么办法呢?通常就是进行概括,抽象,编码对吧!我们通过对对象的特征进行描述,然后当碰到这样的描述进就知道,哦这个对象是什么,那个对象是什么?口水话多了一点,看专业的术语怎么描述的。

对象(Object )

就是客观存在的任何事物(当然也包括一些看不见的事物) 。 例如 , 一只小狗 、 一个人 、 一架飞机等等都可以看做是对象,一个定理,一种思想,一种联系也可以看作对象。每个对象都有自己的静态特性和动态行为。例如 , 一只小狗,它有 “颜色 ” 、 “毛 ” 、 “四肢 ” 等,我们把对象的静态特性称为属性(property,attribute),把 “ 吠叫” 、 “跑跳” 、 “摇尾 ” 等小狗(对象)的动态行为称为方法(method)。每个事物(对象)都有自己的静态特性和动态行为,不同事物 (对象)间的相互联系和相互作用就构成了各种不同的系统。

二、类(Class)

我们把具有相似静态特性动态行为的事物(对象)综合为一个种类(类)。是一组具有内部状态和运动规律对象的抽象,它是一种抽象。

类(Class)

类是对一组具有相同静态特性相同动态行为的对象的抽象,就相当于抓取了许多对象的共同特征,然后进行抽象,浓缩,最后生成的一个模板。一个类所包含的属性方法可以描述一组对象的共同属性和行为。类是在对象之上的抽象对象则是类的具体化,是类的实例。例如,对人作个定义:能直立行走的两足动物。在该定义中, “人” 就是一个类,具有 “两足,直立” 等静态特性和 “行走” 等动态行为,以区别于其它非人类的事物。而具体的张三、李四、王五等人是 “能直立行走” 的人的具体的对象。。

综上:类是广泛的概念,表示一个具有相同属性和方法的多个对象的集合,是一个有共同性质的群体。而对象,所谓“万物皆对象”,指的是具体的一个实实在在的东西。计算机给对象分配内存空间,而不会给类分配内存空间,这很好理解,是抽象的系统不可能给抽象的东西分配空间,对象是具体的。

//  声明一个类“Human”   (java代码)
class Human{   
         private String name;  
         public String getName(){  
                  return name;   
         }   
          public voidsetName(String value){   
                  this.name = value;   
          }  
}   
通过一个类来创建一个对象:  
Human human = new Human();

三、消息(Message)

消息(Message),是指对象间相互联系和相互作用的方式。一个对象通过接受消息处理消息传出消息或使用其他类的方法来实现一定功能,这叫做消息传递机制(MessagePassing)。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。

四、方法(Method)

方法(Method),是定义一个类可以做的,但不一定会去做的事。作为一条狗,是会叫的,因此“吠叫()”就是它的一个方法。与此同时,它可能还会有其它 方法,例如“坐下()”,”摇尾“,或者“跑跳()”。 对一个具体对象的方法进行调用并不影响其它对象,正如所有的狗都会叫,但是你让一条狗叫不代表所有的狗都叫。

五、面向对象特征:抽象、封装,继承,多态

5.1 抽象(Abstraction):是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,类的定义中明确指出,抽象是一种从一般的观点看待事物的方法,它要求我们集中于事物的本质特征(内部状态运动规律), 而非具体细节或具体实现,抓住共同的,关键的,重要的部分。面向对象鼓励我们用抽象的观点来看待现实世界,也就是说,现实世界是一组抽象的对象——类组成 的。举例说明,一条普通的狗,如果想要让它做牧羊犬做的事,你完全可以调用牧羊犬的方法。如果狗这个类还有动物的父类,那么你完全可以这个狗又是一个动物。


5.2 封装(Encapsulation):对象间的相互联系和相互作用过程主要通过消息机制得以实现。对象之间并不需要过多的了解对方内部的具体状态或运动规律。面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。类是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。在类中定义的接收对方消息的方法称为类的接口。


5.3 继承(Inheritance):继承是类不同抽象级别之间的关系。类的定义主要有2种办法归纳演绎:由一些特殊类归纳出来的一般类称为这些特殊类的父类,特殊类称为一般类的子类,同样父类可演绎出子类; 父类是子类更高级别的抽象。子类可以继承父类的所有内部状态运动规律。在计算机软件开发中采用继承性,提供了类的规范的等级结构;通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。


5.4 多态(Polymorphism):多态性是指同名的方法可在不同的类中具有不同的运动规律。在父类演绎为子类时,类的运动规律也同样可以演绎,演绎使子类的同名运动规律或运动形式更具体,甚至子类可以有不同于父类的运动规律或运动形式。不同的子类可以演绎出不同的运动规律。如动物都会吃,而羊和狼吃的方式和内容都不一样。多态性的体现,通常有两种形式:重载重写

        重载(Overload):指类的同名方法在向其传递不同的参数时可以有不同的动作,以实现不同的功能。例如,同样是 “买” 这个动作,如果给定的条件不同,产生的行为就会不一样。

例如:餐厅经理指派员工去买东西,当经理没有指明买什么时候,采购员可能默认为买菜;如果经理指明要买大米,采购员会去买1袋大米;如果经理告诉要买100斤大米,采购员可能会到最近的超市买100斤大米;如果经理告诉要去红旗超市去买,采购员会到指定的超市买100斤大米;如果经理告诉要下午去买,采购员会在下午去步步高超市买100斤大米。

      重写(Override) : 有时候,子类从父类中继承方法时 , 需要 修改父类中定义的方法【即只修改 方法体,方法的参数类型、个数、顺序以及返回值都保持相同】,这就是方法的重写。


总结方法重载VS.方法重写:
1 ) 、方法重载时同名的方法可以是参数类型不同参数个数不同 参数顺序不同返回值不同;
2 ) 、方法重写时子类对父类中的方法保持名字不变参数类型个数和顺序不变,只改变方法体,以使子类和父类通过相同的方法完成不同的操作;
3 ) 、方法重写体现了动态多态性,即在程序运行时而不是在程序编译时决定执行哪一个方法;
4 ) 、父类中实例方法是可访问时(取决于访问修饰符,public,private,protected)才可以被重写的;
5 ) 、类方法 ( 静态方法 static 修饰)可以被继承,但不能被重写
6 ) 、方法重载方法重写都是OOP多态性的表现。

六、抽象类(Abstract Class)与抽象方法(Abstract Method)

抽象类(abstract class)没有任何对象,只可作为一个模板用于创建子类,它用于创建一个体现某些行为的类,并为该类声明方法,但不能在该类中实现该类的情况,以及为面向对象提供更灵活的多态机制。没有抽象方法的抽象类的存在也是有意义的。这决定了这个类是不能被直接实例化的,他的作用基本上是作为一个“框框”存在的。


例如 : 交通工具类的驱动方法只作声明 , 而没有具体的实现细节 。 因此这样的类称作 “抽象类” ,它的方法称作 “抽象方法 ” (drive 方法)。
抽象类定义的一般格式 :
[public]abstract class 类名 [extends 父类名 ][implements 接口表 ]
{
          方法体;
}
定义抽象类的主要目的就是为了创建子类,因此 abstract类不可以是final类。抽象类中可以不包含抽象方法,但包含抽象方法的类必须是抽象类

注意:

(1)、抽象类不能被实例化。
(2)、抽象类中可以有可以没有抽象方法。
(3)、父类中有N几个抽象方法,子类必须去实现这N个抽象方法,哪怕是方法什么事也不做都行。
(4)、父类中定义了抽象方法类型,子类实现这个抽象方法时类型必须现父类一样。
(5)、抽象类中的抽象方法不能被定义成 private
(6)、如果子类只需实现父类中的部分抽象方法,那么此时这个子类也只定义成抽象类。
(7)、如果子类还是抽象方法时,那么这个子类的子类必须实现所有的抽象方法(包括它爷爷的抽象方法)。


七、接口(Interface)

接口(Interface):是一种规范,是一种规则,它只给出了方法的样子,规定你要实现那些方法,而不给出方法的实现,让接口的实现类去实现这些方法,但是对于不同的实现类来说,对方法的实现可以完全不同。


•  接口的实现类如果实现了某一个接口,那么必须实现接口中定义的所有的待实现的方法。如果你不想要实现方法, 那么实现类必须定义为抽象类, 不想实现的方法必须定义为抽象方法。  
•  接口中定义的属性方法的默认访问级别都是public,所以方法肯定不被private所修饰,所有的方法前都默认包含了abstract,表明它是一个抽象方法,但是可以省略,而且默认是省略的,接口只可以定义static final成员变量。
•  接口实际上是一个抽干了的抽象类,接口是抽象类的变体,它里面所有的方法都是抽象的,没有一个有程序体,都是不能给出任何实现部分的----干尸类 。因为接口是一种特殊的“抽象类”,而且因为抽象类可以继承别的类,所以接口也可以继承接口,也只可以继承接口。但是接口不可以实现接口。
•  一个类可以实现多个接口使用关键字implements。
•  一个接口可以继承多个接口使用关键字extends。
•  一个类可以同时继承一个别的类,而且实现一个或多个接口,但是关键字extends要在前。

接口和抽象类的区别:

 接口是用来被实现的,而抽象类是用类被继承的,不能进行实例化

•  接口可以继承别的多个接口,组成一个新的接口
•  抽象类可以继承一个别的,或实现一个或多个接口
•  接口是一个100%的抽象类,里面的方法没有任何一个有任何的实现
•  抽象类可以包含非抽象的方法,也就是说可以给出某一些方法的实现
•  接口一般处于代码的最底层,作出一些规定,而接口之上一层抽象类层,对接口进行第一次的实现,把不可能一次完成的方法,交由自己的子类来实现。
•  抽象类可以有构造方法,而接口不可以有构造方法。接口中定义的变量只能为公有的(public),静态的(static),终态的(final),而且会默认增加。


八、包(Package)

现实世界中不同对象间的相互联系和相互作用构成了各种不同的系统,不同系统间的相互联系相互作用构成了更庞大的系统,进而构成了整个世界。在面向对象概念中把这些系统称为。在系统间相互作用时为了蕴藏系统内部的具体实现,系统通过设立接口界面类或对象来与其他系统进行交互;让其他系统只看到是这个接口界面类对象,这个类在面向对象中称为接口类(此处的接口类不是前面讲的接口)。


九、修饰符(Qualifier)

的访问修饰符(4种)及访问权限:
 
    (1)、friendly(默认)  :同一包中的类可以访问。
    (2)、public:任何包、任何类都可以访问
    (3)、abstract:抽象类。是不是实例化的,只能被继承
    (4)、final:最终类。是不能被继承的
 
属性的访问修饰符(8 种)及访问权限:
    (1)、public:任何包、任何类都可能访问
    (2)、private:只能被自身类访问
    (3)、protected:自身类、子类、同一包中的其它类访问
    (4)、缺省(包变量) :自身类、同一包中的类访问
    (5)、final:等于常量
    (6)、static:类变量,可以直接通过类引用
    (7)、transient:过渡变量
    (8)、volatile:易失变量
 
方法
的修饰符(9 种)及访问权限:
    (1)、public:  任何包、任何类都可以访问
    (2)、private: 只能是自身类
    (3)、protected:自身类、子类、同一包中其它类访问
    (4)、缺省:自身类、同一包中其它类可以访问
    (5)、static:类方法,可以直接通过类引用
    (6)、final:不能被子类方法覆盖,能被子类方法继承使用
    (7)、abstract:抽象方法,没有方法体,出现在抽象类中
    (8)、native:本地方法
    (9)、synchronized:多线程同步

JAVA修饰符应用范围
修饰符外部类属性方法构造方法代码块方法参数内部类
public不可不可
protected不可不可不可
default
private不可不可不可
final不可不可
abstract不可不可不可不可
static不可不可不可
native不可不可不可不可不可不可
transient不可不可不可不可不可不可
synchronized不可不可不可不可不可
voliatile不可不可不可不可不可不可
strictfp不可不可不可不可

十、this、super

this代表当前对象本身 。 通过this变量不仅可以引用当前对象的实例变量, 也可以引用当前对象的实例方法。但要注意,由于类变量和类方法不属于某一个具体的类对象,因此不能通过this变量引用类变量和方法,在类方法中也不能使用this变量。另外,如果方法中形式参数(变量)与实例变量重名时,为了将局部变量和实例变量区分开,在引用实例变量时必须显示地使用this变量,(this.实例变量)。

super代表当前类的父类。通过super可以调用父类的构造方法和父类的成员(变量和方法)。

十一、final、finally、finalize

final:用于声明属性,方法和类,1) 在类定义时,可以使用 final 修饰符使类不被继承; 2) 在定义成员变量时,可通过 final修饰符来定义为常量; 3) 在定义方法时 , 可以使用 final 修饰符避免方法被子类重写。

finally:是异常处理结构的一部分,表示总是执行。

finalize:Object的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如文件关闭等。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值