黑马程序员--Java学习笔记之面向对象思想(多态、内部类、匿名内部类、异常类)

来源:互联网 发布:淘宝图片保护盾 编辑:程序博客网 时间:2024/06/05 08:11
--------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! -------------------

一、重载与覆盖的区别

重载:只看同名方法的参数列表,参数列表不同即为重载。
重写(覆盖):子类父类方法要一模一样,包括返回类型。

二、多态

1、定义:事物存在的多种表现形态。
      类的多态,方法的多态。(方法:重载)
2、多态的前提:
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
3、多态的体现:
父类的引用指向了子类的对象。Person student = new Student();
4、多态的利弊:
提高程序的扩展性。但是只能使用父类的引用访问父类的成员。 
*类型提升(向上转型),向下转型。
*自始至终只有子类对象在做转型。

Animal a = new Cat();//向上转型a.eat();Cat c = (Cat)a;//向下转型c.catchMouse();//c instanceof Cat//
三、在多态中成员方法(非静态)的特点:
1、在编译时期:参阅引用型变量所属的类中是否有调用的方法。有则编译通过。
2、运行时期:参阅对象所属的类中是否有调用的方法。
总结:成员方法在多态调用时,编译看左边,运行看右边。

fu f = new zi();f.method1();//1、编译看父类fu中是否有该方法,有则通过。f.method2();//2、运行时看子类Zi中是否有该方法(包括从父类继承的)。

四、在多态中成员变量的特点:(静态方法也一样)

无论编译还是运行,都参考左边。

五、内部类:

背景:当描述事物时,事物的内部还有事物,该事物用内部类表示。因为内部类可以直接使用外部类的内容。
1、内部类(相当于外部类的成员,外部类不可以)可以被private修饰。
2、内部类可以直接访问外部类的成员,因为相当于Outer.this.***;
3、访问格式:
       当内部类定义在外部类的成员位置上,可以被private、static等修饰。而且非私有时,可以直接访问,
       直接访问内部类:Outer.Inner in = new Outer().new Inner();
4、当内部类中定义了静态成员时,该内部类必须声明为static。
5、内部类一般定义为private,并且对外提供访问接口。
6、内部类定义在局部时,不能被private static等修饰。并且局部内部类中不能定义static成员(因为内部类如果有static成员则该类必须定义为static)。
7、内部类定义在局部时,不可以访问所在的局部中的变量,只能访问被final修饰的局部变量。

六、匿名内部类:
1、前提:必须是继承一个类或者实现接口。
2、假设Listener为接口或者父类

bt.add(new Listener(){//匿名子类的对象作为参数public void show(){//假设父类为抽象类,中的抽象方法为show()*****;} });new Listener(){public void show(){****;}}.show();//前边为匿名子类的对象,后边正常调用对象中的方法。如new Outer().show();
3、匿名内部类的格式:new 父类或接口(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象。
5、可以给匿名内部类增添新的方法,但是一般没有用

Fu f = new Fu(){public void show(){//父类中定义了,重写****;} public void abs(){//子类新加方法****;}};f.show();//通过f.abs();//编译失败,原因参考上边 三 ;所以匿名内部类新加方法一般没用,只是为了写覆写父类的方法。
6、使用匿名内部类是为了简便,因此使用匿名内部类时,内部定义的方法不能过多,否则阅读性太差。

七、异常类:

运用面向对象的思想,将问题进行描述,并进行封装。
1、对于严重的,java通过Error描述。一般不编写针对性处理代码。
2、不严重的,Exception描述。可以针对性处理。
异常处理:

try{//需要检测的代码块}catch(异常类 变量){//处理代码}finally{//一定执行的代码块}

八、自定义异常

1、extends Exception
2、当在函数内部出现throw抛出异常对象,那么就必须给出对应的处理动作。
要么在内部进行try catch处理,
要么在函数上声明让调用者处理。

九、throws和throw的区别

1、throws使用在方法上,即方法的声明;throw使用在方法内,即方法的实现;
2、throws后面跟异常类,可以跟多个,用逗号隔开。throw后面跟异常对象,只能用于抛出一种异常。
3、throws代表一种状态,代表可能有异常抛出,但不一定抛出;throw代表动作,表示抛出一个异常,此时已经抛出。







--------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! -------------------
原创粉丝点击