接口和多态+强制类型转换的概念---达内OOP第八天

1.接口:
  1)是一种数据类型(引用类型)
  2)由interface定义的
  3)接口中只能包含常量和抽象方法
  4)接口不能被实例化
  5)接口是需要被实现/继承的,实现类/派生类:
      必须重写接口中的所有抽象方法
  6)一个类可以实现多个接口,用逗号分隔
    若又继承又实现时,应先继承后实现

  7)接口可以继承接口

类和类---------------继承extends
接口和接口-----------继承extends
类和接口-------------实现implements



Inter2 o1 = new Inter2(); //编译错误,接口不能被实例化

Inter2 o2 = new Aoo(); //向上造型
Inter1 o3 = new Aoo(); //向上造型


interface Inter1{
  void show();
}
interface Inter2 extends Inter1{
  void say();
}
class Aoo implements Inter2{
  public void say(){}
  public void show(){}
}

2.多态:
  1)多态的意义:
    1.1)同一类型的引用指向不同的对象时,具体的实现不同的

   ---------行为的多态:cut(),run(),step()...

人 p1 = new 理发师();
人 p2 = new 外科医师();
人 p3 = new 演员();
p1.cut(); //剪发
p2.cut(); //开刀
p3.cut(); //停止表演


abstract class 人{
  abstract void cut();
}
class 理发师 extends 人{
  void cut(){ 剪发 }
}
class 外科医师 extends 人{
  void cut(){ 开刀 }
}
class 演员 extends 人{
  void cut(){ 停止表演 }
}

1.2)同一个对象被造型为不同的类型时,所具备的功能是不同的

   ---------对象的多态:我、水...

我 me = new 我();
讲师       o1 = me;
孩子他妈   o2 = me;
老公的老婆 o3 = me;
o1.授课();
o2.揍他();
o3.咬他();
o3.收工资();
me.授课();
me.揍他();
me.咬他();
me.收工资();


interface 讲师{
  void 授课();
}
interface 孩子他妈{
  void 揍他();
}
interface 老公的老婆{
  void 咬他();
  void 收工资();
}
class 我 implements 讲师,孩子他妈,老公的老婆{
  public void 授课(){}
  public void 揍他(){}
  public void 咬他(){}
  public void 收工资(){}
}

  2)向上造型:
    2.1)超类型的引用指向派生类的对象
2.2)能造型成为的类型有: 超类+所实现的接口
2.3)能点出来什么,看引用的类型
  3)强制类型转换,成功的条件只有如下两种:
    3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口
  4)强转时若不符合如上条件则发生ClassCastException类型转换异常

    建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型

Aoo o1 = new Boo();
Boo o2 = (Boo)o1; //符合条件1
Inter1 o3 = (Inter1)o1; //符合条件2
Coo o4 = (Coo)o1; //类型转换异常
if(o1 instanceof Coo){
  Coo o5 = (Coo)o1;
}


System.out.println(o1 instanceof Boo);    //true
System.out.println(o1 instanceof Inter1); //true
System.out.println(o1 instanceof Coo);    //false

interface Inter1{
}
class Aoo{
}
class Boo extends Aoo implements Inter1{
}
class Coo extends Aoo{
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值