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、多态的好处
多态的好处体现在方法的参数上,使用父类作为方法参数,调用方法时,直接将对象名作为实参,多个对象也都一样,增加了代码的复用性接口使用时也一样
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 子类
[ ] 理解多态的向下转型
子类 对象名 = (子类类型) 父类对象
[ ] 能够完成笔记本电脑案例(方法参数为接口)