暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

advanced-day03-面向对象-接口多态

是汐江呀 2020-12-07
216

接口

接口可以定义一定个规则,利用这些规定给类进行功能扩展。

接口的定义和使用

//定义接口
public interface 接口名1{
   public abstract void 方法名1();
}

//定义接口
public interface 接口名2{
   public abstract void 方法名2();
}

//实现接口
public class 类名 implements 接口名1,接口名2{
   @Override
   public void 方法名1(){
      ...
  }
   
   @Override
   public void 方法名2(){
       
  }
}

接口的成员特点

成员变量:只能是常量,默认被 public static final 修饰

构造方法:没有,也不能创建对象

成员方法:
JDK7:只能是抽象方法,默认被 public abstract 修饰。必须复写
JDK8: 可以写默认方法, public default 修饰的方法。可选复写
 可以写静态方法, public static 修饰的方法。 使用接口名调用
JDK9: 可以写私有方法,被 private 修饰的方法。 只能在本接口中使用。

类与接口的关系

1.类与类: 单继承关系
2.类与接口: 多实现的关系,可以在继承的基础上实现多个接口
3.接口与接口:多继承关系

多态

多态指的是同一个对象,可以具有多种表现形态。

多态的前提:
1.需要有继承/实现的关系
2.需要有方法复写
3.父类/接口接收子类对象
Animal a = new Dog();
       a.eat();

多态的成员访问特点

1.成员方法的访问特点
如果方法没有复写,执行父类的方法;如果有复写就执行子类的方法

2.成员变量的访问特点
只能访问父类的变量,父类没有就报错了。

多态的好处和弊端

1.好处:提高了代码的扩展性
把方法的参数写父类/接口,调用方法可以传递任意的子类对象

2.弊端:不能调用子类特有的方法
如果想调用子类特有方法,可以进行向下转型。

3.多态的转型
向上转型: Animal a=new Cat(); //多态的写法,就是向上转型
向下转型: 在多态的基础上,才能进行向下转型;原本是什么类型,才能还原成什么类型。
if(a instanceof Cat){
Cat cat=(Cat)a;
}

电脑使用Usb接口

//定义接口:制定规则
public interface Usb {
   public void powerOn();
   public void loadDriver();
   public void run();
}
//实现类实现接口:遵守规则
public class UsbMouse implements Usb {
   @Override
   public void powerOn() {
       System.out.println("鼠标通电");
  }

   @Override
   public void loadDriver() {
       System.out.println("加载鼠标的驱动程序");
  }

   @Override
   public void run() {
       System.out.println("鼠标运行");
  }
}
//实现类实现接口:遵守规则
public class UsbKeyBoard implements Usb {
   @Override
   public void powerOn() {
       System.out.println("键盘通电");
  }

   @Override
   public void loadDriver() {
       System.out.println("加载键盘的驱动程序");
  }

   @Override
   public void run() {
       System.out.println("键盘运行");
  }
}
public class Computer {
   //把接口方法的参数,调用方法时可以接收任意的子类对象
   // Usb u = new UsbKeyBoard();
   // Usb u=new UsbMouse();
   public void function(Usb u) {
       u.powerOn();
       u.loadDriver();
       u.run();
  }
}
public class Demo2 {
   public static void main(String[] args) {
       Computer com = new Computer();

       com.function(new UsbMouse());
       com.function(new UsbKeyBoard());
  }
}



文章转载自是汐江呀,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论