2020-07-12

接口

接口语法

1.接口不可以实例化对象,但是可以向上/向下转型
2.接口当中所有的属性都是静态常量(定义时必须赋值)
3.接口中所有的方法都是抽象方法,但是可以不写abstract
4.接口中只有public一种权限
5.一个类可以同时实现多个接口,但是只能继承就一个父类
6.接口之间可以继承 A extends B,C 多继承
7.接口中不可以定义任何构造函数
8.一个类实现了某个接口以后,必须对接口中所有的方法进行强制重写,除非这个类是抽象类
#java
package study1;

public interface A{
//常量都是public static final,可省略
public static final String sucess = “SUCCESS”;
public static final double pi = 3.14;
byte max_value = 127;
//接口中所有的抽象方法都是public abstract,
public abstract void m1();
//接口方法不能有方法体,如 void m22(){};会提示interface abstract methods cannot have body

void m2();

interface B{
    void m1();
}
interface C{
    void m2();
}
interface D{
    void m3();
}
interface E extends B,C,D{
    void m4();
}
/*
extends只能单继承,implements可以多继承
如果实现的接口有多个方法,必须覆盖接口中的方法。
*/
class MyClass implements B,C{
    public void m2(){}
    public void m1(){}
}
class MyClass2 implements E{
    
    public void m1(){};
    public void m2(){};
    public void m3(){};
    public void m4(){};
}

}

接口的作用
#java
package date818;

/**

  • 接口的作用:
  • 1。可以使项目分离,所有层都面向接口开发,提高开发效率
  • 2。接口是代码和代码之间的耦合度降低。变得可插拔,可以随意切换。
  • 3。接口和抽象类都能完成某个功能,优先选择接口,因为接口可以多实现,多继承。并且一个类除了接口之外,还可以继承其他类
    */
    public interface CustomerService {
    //定义一个推出系统的方法
    void logout();
    }

package date818;
//接口实现类1
public class CustomerServierImpl implements CustomerService {
public void logout(){
System.out.println(“成功退出系统”);
}
}

package date818;
//接口实现类2
public class CustomerServiceImpl2 implements CustomerService{
public void logout(){
System.out.println(“hello world”);
}
}

package date818;

public class TestCustomer {
public static void main(String[] args){
//需要执行CustomerServiceImpl和CustomerImpl2接口实现类中的logout方法
//以下程序面向接口调用
CustomerService cs = new CustomerServierImpl();//多态。父类型引用指向子类型对象
//调用
cs.logout();
CustomerService cs2 = new CustomerServiceImpl2();
cs2.logout();
}
}
#java
//定义接口
package date818;

public interface Engine {
//所有发动机都可以通过这个接口启动
void start();
}
//定义实现接口的类
package date818;

public class Honda implements Engine{
public void start(){
System.out.println(“本田启动”);
}
}
package date818;

public class Ymaha implements Engine{
public void start(){
System.out.println(“雅马哈启动”);
}
}
//定义生产汽车的类
package date818;

public class Car {
//面向接口编程,不能将类实例化
/**
* 引用接口定义一个属性e,相当于
* String name;
* Integer age;
* 类里定义的变量是成员变量;方法里定义的变量是局部变量。
*/
Engine e ;

Car(Engine e){
    this.e=e;
}
//对外提供的测试方法
public void testEngine(){
    e.start();
}

}
//定义测试类
package date818;

public class TestCar {
public static void main(String[] args){
//生产引擎
Engine e = new Ymaha();
//根据构造方法传入参数生产汽车
Car c = new Car(e);
//测试引擎
c.testEngine();
c.e = new Honda();
c.testEngine();
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值