接口,多态

1、接口概述及作用

继承:一个类只能有一个父类

接口:1)、为了弥补抽象类的扩展性不足

​ 2)、多态的一个前提

​ 3)、提高代码的复用性

2、接口的定义格式及成员种类

1)、更加抽象的一个类

public interface I接口名{
    //1、静态常量
    //2、抽象方法

    //3、默认方法
    //4、静态方法

    //5、6私有方法(static和非static)
}

3、接口中成员定义

public interface I接口名{
    //1、静态常量(不希望被改变的值)
    //final(不可改变)
    public static final int NUM = 值;//public static final不写程序也会自动写上
    (命名时要使用全部大写,俩单词间用_)
    //2、抽象方法    abstract
    public abstract void 方法名();
    //3、默认方法    default
    public default void 方法名(){}
    //4、静态方法    static
    public static void 方法名(){}
    //5、static私有方法  private
    private static void 方法名(){}
    //6、非static私有方法
    private void 方法名(){}
}

4、接口的使用格式

接口是比抽象类更抽象的”类”

接口天生就是父接口

public class 实现类 implements 接口名{
    //必须实现抽象方法
    //可以重写默认方法,也可以不写
    //static的方法和变量都是使用接口名.名使用
    //private方法只能在接口中使用
}

非静态可以访问静态与非静态的方法

静态的只能访问静态的方法

5、接口中各种方法的使用

1)、静态常量 接口名.常量名

2)、静态方法 接口名.静态方法名

3)、抽象方法,必须在是实现类中进行重写

4)、默认方法,选择的进行重写

5)、私有方法,只能在接口中使用

​ 非静态可以访问静态与非静态的私有方法

​ 静态的只可以访问静态的私有方法

6、接口的多实现

一个类可以同时实现多个接口

public class 实现类 extends 父类名 implements 接口1,接口2...{
    //必须重写所有抽象方法(父类+所有接口),对于抽象方法名相同的,只需要重写一次
    //默认方法有重名时,就必须重写
}

7、继承与实现的优先级

一个类既可以继承一个父类,又可以实现多个接口

先继承再实现接口

public class 实现类 extends 父类名 implements 接口1,接口2...{
    //不需要考虑私有和,静态
    //抽象方法,重名也只需要重写一次
    //默认方法,接口中有默认方法与父类中的重名
        父类中的优先级高    继承优先于实现
            子类优先级更高
}

8、接口和接口的多继承

类与类,单继承

类与接口, 实现

接口与接口,多继承

public interface 子接口 extends 接口1,接口2...{
    //继承抽象方法,重名时,重写一次就好
    //继承默认方法,必须重写
}

10、接口中的注意事项

1)、接口中不能有成员变量,不能有构造方法,不能有公有的普通方法

2)、接口不能创建对象

3)、不可以有静态代码块

11、多态-概念

1)、面向对象的三大特征之一

2)、多态,提高代码的复用性和扩展性

一类事物的多种形态

父类 对象名 = new 子类();//类的多态
接口 对象名 = new 子类();//接口的多态

12、多态的Java实现:类的多态

父类 对象名 = new 子类();//类的多态

1)、继承关系是多态的前提

2)、子类不能是抽象类

3)、父类可以不是直接父类,可以是间接父类

4)、父类一般是抽象类

13、多态的Java实现:接口的多态

接口 对象名 = new 子类();//接口的多态

1)、子类必须实现这个接口

2)、子类不能是抽象类

14、多态的好处

1535257434721

多态的好处体现在方法的参数上,使用父类作为方法参数,调用方法时,直接将对象名作为实参,多个对象也都一样,增加了代码的复用性接口使用时也一样

15、多态调用方法和特点

父类 对象名 = new 子类();//类的多态

​ 变量没有覆盖重写

​ 方法有覆盖重写

16、多态的弊端

子类保存成了父类的类型

​ 不能调用子类的成员

17、多态的类型转换

向下转型:父类型转为子类型

这里写图片描述

子类类型 对象名 = (子类类型)  父类对象名  

向上转型:子类型转为父类型

18、向下转型的风险

向下转型有风险,向下转型是专为其他子类型,会报错,有风险

19、instanceof关键字

这里写图片描述

用来规避向下转型的风险

变量名 instanceof 数据类型 
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false

复习

  • [ ] 写出定义接口的格式

    public interface 接口名{
      public static final 常量类型 常量名;//静态常量
      public abstract void 方法名();//抽象方法
      public default void 方法名(){}//默认方法
      public static void 方法名(){}//静态方法
      private void 方法名(){}//私有方法
    }
  • [ ] 写出实现接口的格式

    public class 类名 implements 接口名{
      //重写抽象方法
    }
  • [ ] 说出接口中成员的特点

    静态常量:在接口中定义好之后无法改变的值

    抽象方法:实现接口的非抽象类必须重写的方法

    默认方法:实现接口的类可以选择性的对其进行重写

    静态方法:只能使用接口名.方法名进行使用

    私有方法:只有接口中的方法可以对其进行调用

  • [ ] 能够说出使用多态的前提条件

    继承是多态的前提条件

  • [ ] 理解多态的向上转型

    父类 对象名 = new 子类 
  • [ ] 理解多态的向下转型

    子类 对象名 = (子类类型) 父类对象
  • [ ] 能够完成笔记本电脑案例(方法参数为接口)

猜你喜欢

转载自blog.csdn.net/qq_38353993/article/details/82082043
今日推荐