黑马日记第四篇——面向对象(下)

---------------------- android培训java培训、期待与您交流! ----------------------

一、多态

多态的体现形式:父类的引用指向了自己的子类对象;父类的引用也可以接受自己的子类对象。

多态的前提:必须是类与类(接口)之间有关系(继承/实现),一般需存在覆盖。

多态的利处:多态的出现提高了程序的扩展性。

多态的弊端:只能使用父类的引用来访问父类中的成员。

重点记忆:

多态中成员函数的特点:(静态多态性与动态多态性)

在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过。如果没有,则编译失败。

在运行时期:参阅对象所属的类中是否有调用的方法,如果有,可以运行。如果没有,则会报错。

简单总结:(针对 father f=new son();这种形式)成员函数在多态调用时,编译看左边,运行看右边;在多态中成员变量特点:无论编译或运行,都参考左边(引用型变量所属的类);多态中,静态成员函数无论编译或运行,都参考左边。


二、toString方法与equals方法

toString方法是Java中Object类的方法,很多类都重写了该方法,在使用时,我们可以按需要重写该方法。该方法返回对象的状态信息。

toString原型:public String toString()

equals方法也是Object类中的方法,很多类中同样重写了该方法,一般情况,我们重写equals方法是为了比较两个对象的内容是否相等。

equals原型:public boolean equals(Object obj){return (this.obj);}


三、内部类

访问规则:

1.内部类可以直接访问外部类中的成员,包括私有;

2.外部类如需访问内部类成员,必须建立内部类的对象。

外部其他类简历对象访问内部类格式:Outer.Inner in=new Outer().new Inner();

访问格式:

1.当内部类定义在外部类的成员位置上,并且非私有,可以在外部其他类中建立内部类对象:外部类名.内部类名.变量名=外部类对象.内部类对象。

2.当内部类在成员位置上时,可以被成员修饰符修饰,如:private(这样可以将内部类在外部类中进行封装)、static(使内部类具备static特性)。

3.当内部类被static修饰后,只能访问外部其他类的静态成员,产生访问局限。

注意:当内部类中定义了静态成员时,该内部类也必须是静态的;当外部类中的静态方法访问内部类时,内部类也必须是静态的。

什么时候使用内部类?

当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物 在使用外部类中的事物内容。

匿名内部类:

1.匿名内部类是内部类的简写形式。

2.定义匿名内部类的前提:内部类必须继承一个类或者实现一个借口。

3.匿名内部类格式:new 父类或借口(){定义子类内容}.方法();

4.匿名内部类相当于一个匿名子类对象,只是看起来这个对象内容比较多,可以理解为带有内容的对象。

5.一般来说,匿名内部类中定义的方法不超过三个。


四、异常

异常处理的一般格式:

try

{

    需要被检测的代码;

}

catch(异常类 变量)

{

    处理异常的代码(处理方式)

}

finally

{

    一定会被执行的代码(一般用于关闭资源)

}

一个try块可以对应多个catch块,finally不是必须写的。如果只有try块和finally块,表示这个异常不解决,如果这个异常是检测时异常(非RuntimeException型),那么这个异常必须被声明。

异常的体系:

Throwable

    |--Error

    |--Exception

            |--RuntimeException

异常体系的特点:异常体系中所有的类以及建立的对象都具备可抛性,即可以被throw和throws操作。

多异常的处理注意:

1.声明异常时,尽量声明更为具体的异常,这样处理时也可以更为具体。

2.声明了几个异常,就对应几个catch块;异常如出现了继承关系,父类异常的catch块放在最后。

throws与throw的区别:

throws定义在函数上,用于抛出异常类,多个可以使用“,”隔开;throw用于函数内部,用于抛出异常对象。

异常有两种:

编译时期被检测异常:该异常如在编译时期未处理(try、throws),编译失败;

运行时异常(编译时不检测):编译时不处理,直接修正代码。

RuntimeException:

Exception的特殊子类异常,在函数内抛出此异常或其子类时,函数上可以不做声明,编译能够通过;如果声明了该异常,调用者可以不做处理,编译也通过。

一般情况,当函数内有throw抛出异常对象时,并且没有对其进行try处理,必须要在函数上声明throws,否则编译失败,但是如果抛出的是RuntimeException类型异常,可以不做声明。

异常在子父类覆盖中的体现:

1.子类覆盖父类方法时,如果父类的方法抛出了异常,那么子类的覆盖方法也必须抛出父类的异常或该异常的子类。

2.如果父类抛出了多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集。

3.如果父类或者被实现接口中没有异常抛出,那么子类在覆盖方法时也不可以抛出异常。如果子类发生了异常,就必须在内部进行try处理,绝对不能抛出。

异常的好处:

1.将问题进行封装(体现了java面向对象思想)。

2.将正常流程代码与问题代码相分离,便于阅读。

异常处理的原则:

1.处理的方式有两种:try、throws。

2.调用到抛出异常的功能时,抛出几个就处理几个。

3.当出现多个catch块时,父类异常的catch块放到最下面。

4.catch块内,要给出有针对性的处理方式。如果本功能处理不了,可以再次抛出。


五、包

利处:对类文件进行分类管理,给类提供了多层命名空间(报名.类名),java的一种封装形式。

注意:

1.import导入的是包中的类,如需导入具体的类可以用以下形式导入:import 包名.类名;

2.打包语句package写在引入包语句import的前面;他们都在类声明语句的上面;

扩展:权限修饰符的不同作用域:

权限               public  >  protected  >  default  >  private

同一个类中       OK              OK               OK             OK

同一个包中       OK              OK               OK

子类                 OK              OK 

不同包              OK

jar包:利处:

1.方便项目携带。

2.便于使用,只要在classpath中设置好jar包路径即可。

3.数据库驱动SSH框架等都是以jar包形式体现。

----------------------  android培训java培训、期待与您交流!----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值