ACAC 接口interface


/*
 * 接口:
 * 1、接口是一种引用数据类型
 * 2、接口是完全抽象的(抽象类是半抽象)
 * 或者也可以说接口是特殊的抽象类
 * 3、语法:
 *   【修饰符列表】interface 接口名{
 * }
 * 不同于抽象类:
 *   【修饰符列表】 abstract class 类名{
 * }
 * 4、接口支持多继承,一个接口可以继承多个接口
 * 5、接口中只包含两部分:
 *  一部分:常量  一部分:抽象方法
 * 6、接口中所有元素都是public修饰的
 * 7、接口中的抽象方法定义时,可以省略public abstract
 * 8、接口中的方法不能有方法体,都是抽象方法
 * 9、interface中没有变量,只要常量(不能更改)
 *    可以调用,(A.PI)
 *
 *
 * */

public class Test01 {

    public static void main(String[] args) {
        System.out.println(C.PI);
        //C.PI = 12;
    }
}

interface A {

}

interface B {

}

interface C extends A, B {

    public static final double PI = 3.1415926;
    double PI02 = 3.12;
//   接口可以省略常量前的public static final

    public abstract void sum(int a, int b);

// 接口中都是抽象方法,可以省略public abstract?
    int sum02(int a, int v);


//    接口中可以有方法体?
//    void doSome(){}报错不能

}

======================================================================================================

public class Test02 {
    public static void main(String[] args) {
        MyMathTemp a = new MyMathTemp();
        a.sum(12,13);
    }
}

//特殊的抽象类,完全抽象的,接口
//因为抽象类中可以有抽象方法,
// 亦可以有实例方法
interface MyMath{

    double PI = 3.1414926;
    int sum(int a,int b);

}
/*
* 接口基础语法:
*   类和类之间叫做继承
*   类和接口之间叫实现
* (当然,你也可以叫做“继承”)
* 继承使用extends
* 实现用implements关键字
*
* */
class MyMathTemp implements MyMath{
//重写,覆盖,实现,接口中的方法(通常叫实现)
// 当一个非抽象类实现接口中方法,必须将接口中方法全部实现
// 子类不能去掉public,修饰符只能权限更高,不能更低
    public int sum(int a,int b){
        System.out.println(a + b);
        return a;
    }
}

======================================================================================================

/*
 * 接口和接口之间支持多继承,
 *      一个类可以同时实现多个接口
 * 这种机制弥补了java中的哪种缺陷?
 *   java中类和类之间只支持单继承
 *   实际上单继承是为了简单而出现的
 *   现实世界中存在多继承,java中的接口
 *   弥补了单继承带来的缺陷
 * 接口互转问题:
 *    A和B没有继承关系,但是可以互转
 *    编译器没意见,但运行时可能出现
 *    ClassCastException
 * 注意:
 *     向下转型,首先进行判断instanceof
 */
public class Test03 {
    public static void main(String[] args) {
        Son ff = new Son();
        ff.f();
        ff.m();

        Y yy = new Z();
        if(yy instanceof X){
            X xx = (X)yy;
        }


//刚开始这里写成 X xx = (Y)yy;错误:会报Y 无法转成X
/*
* 经过测试,强制类型装换的时候,没有继承关系,也可强转
* 注意:运行时会报ClassCastException异常
* 编译通过,运行不通过
* */
        Father a = new Son();
        Mother b = new Son();
        Father c = (Father)b;
//  这样写是可以的


    }
}

interface X {

}

interface Y {
}

class Z implements Y {

}

//===============================================
interface Father {
    void f();
}

interface Mother {
    void m();
}

class Son implements Father, Mother {
    public void f() {
        System.out.println("实现第一个接口");
    }

    public void m() {
        System.out.println("实现第二个接口");
    }
}

======================================================================================================

/*
* 继承和实现都存在的话,代码怎么写?
*       extends在前,implement在后
* 同一个接口,调用同一个fly()方法,最后执行效果不同
*       接口通常提取的是行为动作(如:飞行)
* */
public class Test04 {
    public static void main(String[] args) {
        Fly p = new Pig();
        p.fly();

        Fly c = new Cat();
        c.fly();

    }
}
class Animal{

}
interface Fly{
    void fly();
}
class Pig extends Animal implements Fly{
    public void fly(){
        System.out.println("这只猪上天了,插着翅膀");
    }
}
class Cat extends Animal implements Fly{
    public void fly(){
        System.out.println("小猫实现fly的方法,也上天了");
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值