Java面向对象(封装、继承、多态),异常学习笔记
在说Java面向对象之前,咱们先来理解一下什么是类,什么是对象。
类和对象
对于类,我的理解就是:类就是一个模板,是一种定义物体性质的、具有各种共同特征的抽象模板。就像游戏中人物的模板,每个人物都有Hp,Mp,攻击力等等的各种属性,这里指的并不是各个属性的数值,而仅仅指的是有这个属性。而这些属性,加上这个属性是干嘛的以及各个属性之间有什么关系等等的总和在一起,就是人物的初始模板,也就是类。当然,类并不非得像上文所说要包含所有的关系,但是,作为一个类,最基本的成分是属性和方法。
而对象就是用类定义的事物,是基于类而产生的具体的(而非类的抽象)待处理事物,也用游戏来说,对象就是一个个基于基本人物模板创建出来的人物,他们都具有共同的属性类型,但是属性的具体值却不尽相同。而在Java中,最基本的编程思想就是面向对象编程,这句话的意思其实就是Java的操作是给予创建对象后,对对象的属性或本身进行操作的思想。
这是类的定义方法(未加任何修饰词):
class Java{
int a; //定义属性
float b;
Java(){ //定义构造方法
}
}
这是对象的定义方法(未加任何修饰):
Java java = new Java(); //java是对象名,Java()是构造函数
封装、继承、多态就是Java面向对象的三大属性。
封装
我们拿起手机来,轻触按键就可以实现拍照、录音等等功能,但我们并不知道是怎样进行这些功能,也并不知道这些功能的进行需要那些物品,但实际上,这些简单的功能背后都有复杂的电子电路。而把原本复杂的电路或者元器件放在一个密闭的盒子里(手机),让使用者只要按动按键就可实现某种功能,这就是封装。
在Java中,封装是指把对象的属性和方法存放在一个独立的模块(类)中,尽可能的隐藏对象的数据和功能的实现细节。甚至可以如此理解,由封装产生类。
封装的好处也显而易见,一是可以比较方便的实现某种功能而不必了解具体实现(对于对象),二是可以较好的避免信息暴露。
封装的示意图:
继承
继承,顾名思义,就是子类继承父类的某些属性和方法。
继承示意图:
当然,就像真正的父子一样,继承并不意味着一模一样,继承中的子类只能继承父类的部分属性和方法,具体如下:
可见,子类继承的只是父类的protected和public修饰的属性和方法。
子类具体的定义方法是使用extends关键词,具体的格式是:
class 子类名 extends 父类名 {
。。。。(内容)。。。。
}
class Father{ //定义父类
public int a; //定义private和public属性
private int b;
}
class Son extends Father{ //Son类会继承Father类的public属性,但不会继承private属性
}
在Java中,一个子类只能有一个父类,即Java并不支持多重继承。
Java的类按继承关系形成树形结构这个树形结构中,根节点是Object类(Object是java.lang包中的类),即Object是所有类的祖先类。除了Object类,每个类都有且仅有一个父类,一个类可以有多个或零个子类。如果一个类(除了Object类)的声明中没有使用extends关键字,这个类被系统默认为是Object的子类,即类声明“class A”与“class A extends Object”是等同的。
总结来说:继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类(超类)。
多态
何为多态?多态性(polymorphism来自希腊语,多种形态):
在基类中定义的属性或行为,被派生类继承之后,可以具有不同类型或表现出不同的行为。这使得同一个行为在基类及其各个派生类中具有不同的实现。不同对象收到相同消息时,会产生不同行为。
我的理解是:同一类所派生的子类或者定义的对象在遭受同一影响时所产生的不同反应。还是那游戏来举例子:不同的人物在遭受同一伤害时会有不同的反应,有的会有护甲减伤,有的会有技能躲避,还有的就是挨着,都是由同一个类定义的不同人物的不同反应,这就是多态的一种。
而实现多态的方法也有很多,如下:
多态即多态,很多的方法都可以实现,也说明了,编写Java程序,有些地方不必完全写死,没准以后就要在那个地方再改改。
异常
对于异常的理解,顾名思义,异常就是程序可能出现不正常状况的代码段。
对于处理异常,Java提供了try进行处理:
try{
需要被检测的代码
}
catch(异常类 变量){
处理方式
}
finally{
一定会执行的语句
}
对捕获到的异常对象进行常见方法的操作
1.getMessage():获取异常信息
2.printStackTrace():获取异常名称,异常信息,异常出现的位置。
后言
初学Java,虽言比C语言简单,但亦是博大精深,学习Java时,颇有文海寻墨的意味,但比起汉语,Java作为一种计算机语言,它的语法和严谨的逻辑是自然语言所不具有的,这也正是Java的魅力所在,无论学习时有多么的艰辛,担当按下编译运行时程序调试无误的那种成就感,却不是背下几篇古文可以比拟的。