黑马程序员_09面向对象(4)多态

来源:互联网 发布:盒子直播平台源码 编辑:程序博客网 时间:2024/05/17 09:39

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

多态:事物的多种体现形态

体现:父类引用指向自己的子类对象       Fu f = new zi(); f.方法();

好处:极大提高程序的扩展性

前提:必须是类与类之间有关系,继承(extends)或者是实现(implements)

通常存在覆盖,只能使用父类的引用访问父类中的成员


关键字:instanceof   所属类型判断,于判断关键字相连,使用条件是当子类类型有限,选项少的情况下.


多态中,非静态方法的特点:

编译时: 参阅引用型变量所属的类中是否有调用的方法, 没有则编译失败

运行时:参阅对象所属的类中是否有调用的方法

简单概括:成员函数在多态调用时,编译看左边,运行看右边     Fu  f = new zi()


Object,超类

所有对象的直接或者间接父类,该类定义的是所有对象都具备的功能.

equals方法:  比较类的内存地址值,一般会被复写



内部类:将一个类定义在另一个类里面,里面的类称为内部类(嵌套类)

内部类定义在外部类的成员位置上:可以被修饰符修饰.

pirvate:将内部类在外部封装

如果非私有,可以在外部其他类中直接建立内部类对象:

外部类名.内部类名 变量名 = 外部类对象.内部类对象;

例:Outer.Inner in        =  new Outer().new Inner();

被static修饰的内部类只能访问外部类中的静态成员。

外部其他类中直接访问static内部类的非静态成员: new Outer.Inner().function();

当内部类中定义了静态成员,该内部类必须是静态的


内部类定义在局部位置上:可以直接访问外部类中的成员.同时可以访问所在局部中的局部变量,但必须是被final修饰的。

访问规则:

1,内部类可以直接访问外部类中的成员,包括私有,之所以可以直接访问,是因为内部类中持有一个外部类的引用

格式:外部类名.this

2外部类要访问内部类,必须建立内部类的对象



匿名内部类:

定义的前提:必须实现接口 或者继承一个类

匿名内部类就是一个匿名子类对象(带内容的子类对象).定义的方法最好不要超过3个

格式:  new  父类或接口(){定义子类内容;}.方法



Throw

 |__Error (错误,停止程序)

|__Exception(异常,调试后继续运行) 

异常是对问题的描述,把问题封装成对象,throwable 所有类及监理的对象都具备可抛性

好处:将问题进行封装,将正常代码和问题代码分离,提高阅读性

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

 一个try对应多个catch,多个catch中父类catch放在最下面,catch内需要定义针对性的处理方式,不要简单定义printStackTrace语句

printStackTrace:JVM默认使用,打印异常的堆栈跟踪信息

/异常名称   异常信息    异常出现位置

printStackTrace(PrintStream s) 

通常用该方法将异常内容保存在日志文件中,以便查阅


在函数上声明异常,便于提高安全性,让调用者处理,不处理就编译失败

try{需要检测的代码;}catch(异常类  变量){异常处理代码;}finally{一定会执行的代码;}Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)


对多异常的处理

1:声明异常时,建议声明更为具体的异常,这样可以处理的更具体

2:声明几个异常,就有几个catch块,如果多个catch块中出现继承关系,父类异常catch块放在最下面

自定义异常:异常自定义 必须继承Exception是异常体系的特点

异常类和异常对象都要被抛出,具备可抛性是 throwable体系中的独有特点

throws: 使用在函数上连接异常类,可以连接多个,用逗号(,)隔开

throw:使用在函数内,连接着异常对象

自定义异常时,如果该异常发生无法继续进行运算,就让该异常继承Runtime异常

异常区别:

1,编译时被检测的异常,能处理,处理完程序继续运行的,继承Exception

2,编译时不被检测:不能处理,让程序停止,继承运行时异常,Runtime Exception以及它的子类

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

1,子类在覆盖父类时,如果父类的方法抛出异常,子类的覆盖方法只能抛出父类的异常或者该异常的子集

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

3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不能抛出异常

如果子类方法发生异常,就必须进行try catch 处理,绝对不能抛出

4,如果函数声明了异常,调用者需要进行处理,处理方法可try可throw

当函数内有throw抛出异常对象,并未进行处理,要在函数上声明.如果抛出的Runtime,可以不用声明


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

0 0
原创粉丝点击