JAVA第一阶段(下)— 09

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)


上一篇:Oracle On 、Where、Having 区别


下一篇:【译】单一责任原则