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

--------------------- 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培训、期待与您交流! -------------------
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值