JAVA第一阶段(下)
文章目录
一、多态
1.1 意义
多态的意义主要有两点
1)同一类型的引用指向不同的对象时,具有不同的实现----所有抽象方法都是多态的
----行为的多态:cut()、step()、getImage()…
2)同一个对象被造型为不同的类型时,具有不同的功能----所有对象都是多态的
----对象的多态:我、水…
1.2 向上造型
向上造型也可以叫做自动类型转换,有如下特点:
1)超类型的引用指向派生类的对象
2)能造型成为的数据类型有: 超类+所实现的接口
3)能点出来什么,看引用的类型
1.3 强制类型转换
成功的条件只有如下两种:
1)引用所指向的对象,就是该类型
2)引用所指向的对象,实现了该接口或继承了该类
if(f instanceof EnemyScore){
EnemyScore es = (EnemyScore)f;
score += es.getScore();
}
if(f instanceof EnemyAward){
EnemyAward ea = (EnemyAward)f;
int type = ea.getAwardType();
switch(type){
case 0:
hero.addFire();
break;
case 1:
hero.addLife();
break;
}
1.4 Instanceof
强转时若不符合如上条件,则发生ClassCastException类型转换异常
建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型
//多态的演示
public class MultiTypeDemo {
public static void main(String[] args) {
Aoo o = new Boo(); //向上造型
Boo o1 = (Boo)o; //引用o所指向的对象就是Boo类型
Inter o2 = (Inter)o; //引用o所指向的对象实现了Inter接口
//Coo o3 = (Coo)o; //运行时会发生ClassCastException类型转换异常
if(o instanceof Coo){ //false
Coo o3 = (Coo)o;
}else{
System.out.println("o不是Coo类型");
}
}
}
interface Inter{ }
class Aoo{ }
class Boo extends Aoo implements Inter{ }
class Coo extends Aoo{ }
1.5 扩展-常见面试题
1)问:switch分支语句可以作用于哪些数据类型上?
答:byte,short,int,char,枚举,String(JDK 1.7开始支持)
2)问:重写与重载的区别?
答:重写(override):发生在父子类中,方法名相同,参数列表相同
重载(overload):发生在同一类中,方法名相同,参数列表不同
3)问:简述public、private、protected以及默认权限的访问范围?
答:public:公开的,任何类
private:私有的,本类
protected:受保护的,本类、派生类、同包类
默认的:什么也不写,本类、同包类
4)问:简述java的八种基本数据类型
答:byte字节型(1),short短整型(2),int整型(4),long长整型(8)
float单精度浮点数(4),double双精度浮点数(8)
boolean布尔型(1)
char字符型(2)