一.接口
- 概述
- 定义格式
public interface 接口名称 {
}
public interface InterFaceName {
public abstract void method();
}
public interface MyInterfaceDefault {
public abstract void methodAbs();
public default void methodDefault(){
System.out.println("新添加的默认方法");
}
public class MyInterfaceDefaultA implements MyInterfaceDefault{
@Override
public void methodAbs() {
System.out.println("实现了抽象方法.AAA");
}
public class MyInterfaceDefaultB implements MyInterfaceDefault{
@Override
public void methodAbs() {
System.out.println("实现了抽象方法,BBB");
}
@Override
public void methodDefault() {
System.out.println("实现类B覆盖重写了接口的默认方法");
}
public class Demo02Interface {
public static void main(String[] args) {
MyInterfaceDefaultA a = new MyInterfaceDefaultA();
a.methodAbs();
a.methodDefault();
System.out.println("==========================");
MyInterfaceDefaultB b = new MyInterfaceDefaultB();
b.methodAbs();
b.methodDefault();
}
public interface InterFaceName {
public default void method() {
}
public static void method2() {
}
}
public 返回值类型 方法名称(参数列表){
}
public static 返回值类型 方法名称(参数列表){
}
- 基本实现
public class 实现类名称 implements 接口名 {
}
public interface MyInterfaceConst {
public static final int NUM_OF_MY_CLASS = 10;
}
public class Demo05Interface {
public static void main(String[] args) {
System.out.println(MyInterfaceConst.NUM_OF_MY_CLASS);
}
}
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
}
public interface MyInterfaceA {
public abstract void methodA();
public abstract void methodAbs();
public default void methodDefault(){
System.out.println("默认方法AAA");
}
}
public interface MyInterfaceB {
public abstract void methodB();
public abstract void methodAbs();
public default void methodDefault(){
System.out.println("默认方法BBB");
}
}
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB {
@Override
public void methodA() {
System.out.println("覆盖重写了A方法");
}
@Override
public void methodAbs() {
System.out.println("覆盖重写了AB接口均有的抽象方法");
}
@Override
public void methodDefault() {
System.out.println("对冲突方法进行默认重写");
}
@Override
public void methodB() {
System.out.println("覆盖重写了B方法");
}
}
- 接口小结
- 成员变量为常量,格式:[public] [static] [final] 数据类型 常量名称 = 数据值;
注意 : 常量必须进行赋值,赋值不可改变;常量名称完全大写,下划线分隔. - 接口中的抽象方法,格式 :[public] [abstract] 返回值类型 方法名称(参数列表);,实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类.
- java8以后,接口里允许定义默认方法,格式:[public] default 返回值类型 方法名称(参数列表) {方法体};,默认方法也可被覆盖重写.
- java8以后,接口允许定义静态方法,格式:[public] static 返回值类型 方法名称(参数列表){方法体};,通过接口名称进行调用,不能通过实现类对象调用接口静态方法.
- java9开始,接口允许定义私有方法,只有接口自己才能调用,格式:
- 普通私有方法 : private 返回值类型 方法名称(参数列表){方法体};
- 静态私有方法 : private static 返回值类型 方法名称(参数列表) {方法体};
- 接口之间多继承
- 类与类之间单继承,直接父类只有一个
- 类与接口之间多实现,一个类实现多个接口
- 接口与接口之间多继承的
注意事项: - 多个父接口中的抽象方法如果重复,没有关系
- 多个父接口的默认方法重复,子接口必须进行默认方法的覆盖重写,必须带default修饰符.
二.多态
父类类型 变量名 = new 子类对象();
接口名称 对象名 = new 实现类名称();
变量名.方法名();
public abstract class Animal {
public abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
}
public class Test {
public static void main(String[] args) {
Animal a1 = new Cat();
a1.eat();
Animal a2 = new Dog();
a2.eat();
}
}
((Zi) obj).methodZi();
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0fcb4157d2b1123480db5c2956eb9a83.png#pic_center)
三.引用类型转换
父类类型 对象名 = new 子类类型();
如:Animal a = new Cat();
子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;