java笔记:接口的特征和使用

接口

1.接口的定义

【修饰符】interface 接口名 extends 父接口1,父接口2{
    零个到多个常亮定义
    零个到多个抽象方法定义
    零个到多个内部类 接口 枚举定义
    零个到多个默认方法或类方法定义.
}

*修饰符可以为public或者省略(default),如果省略了public,默认使用包权限访问控制符(在相同包结构才可以访问接口)

*一个接口可以有多个直接父接口,但是接口只能继承接口,不能继承类

*接口定义的只是一种规范,所以接口中不能包含构造器和初始化块定义,接口中可以包含成员变量(静态常量),方法(抽象实例方法,类方法或者默认方法),内部类(内部接口,枚举等)定义

*接口中的成员变量默认使用public static final进行修饰

2.接口是什么

接口定义的是一些多个类共同的公共行为规范(内部的修饰符均为public),这些规范是和外界沟通的通道

 

3.接口的多继承

接口相较于类而言,可以实现多继承

package demo01;

public class Client {
	interface interfaceA{
		int PROP_A=5;
		void testA();
	}
	interface interfaceB{
		int PROP_B=6;
		void testB();
	}
	interface interfaceC extends interfaceA,interfaceB{
		int PROP_C=7;
		void testC();
	}
	public static void main(String[]args){
		System.out.println(interfaceC.PROP_A);
		System.out.println(interfaceC.PROP_B);
		System.out.println(interfaceC.PROP_C);
		
	}

}

4.如何使用接口?

接口不能用来创建实例,但是接口可以用于声明引用类型变量,必须引用到其实现类的对象,借口的主要用途就是被实现类实现

*定义变量,也可以用来进行强制类型转换

*调用接口中定义的常量

*被其他类实现

 

5.接口和抽象类的区别

相同点:

接口和抽象类都不能被实例化,它们位于继承树的顶端,用于被其他类进行实现和继承

接口和抽象类中都可以包括抽象方法,实现接口或继承抽象类的普通子类必须实现抽象方法

 

不同点:

接口体现的是一种规范,规定了必须向外部实现哪些服务(以方法的形式),对于接口的调用者而言,接口规定了调用者可以进行调用哪些服务,如何调用这些服务。当在一个程序中进行调用时,接口是多个模块的耦合标准,当在多个程序中进行调用时,接口是多个程序之间的通信标准

 

抽象类作为多个子类的父类,体现的是一种模板设计

*接口中只有抽象和默认方法,抽象类中可以包含普通方法

*接口中不能有静态方法,抽象类中可以

*接口中只能定义静态常量,不能定义普通成员变量,抽象类中均可

*接口中无构造器,抽象类中可以提供为其他类调用的构造器

*接口中没有初始化块,抽象类中可以包含初始化块

 

6.面向接口编程(简单工厂模式)

package com.lz.factory.simplefactory;

public interface Car {
    public void run();
}

package com.lz.factory.simplefactory;

import com.lz.factory.factorymethod.Audi;
import com.lz.factory.factorymethod.Byd;
import com.lz.factory.factorymethod.Car;
import com.lz.factory.factorymethod.Farri;

public class CarFactory {
    public static Car createCar(String type){
        if("奥迪".equals(type)){
            return new Audi();
        }else if ("比亚迪".equals(type)){
            return new Byd();
        }else if("法拉利".equals(type)){
            return new Farri();
        }
        else{
            return null;
        }
    }

    public static Car createAudi(){
        return new Audi();
    }
    public static Car createFarri(){
        return new Farri();
    }
}

package com.lz.factory.simplefactory;

import com.lz.factory.factorymethod.Car;

public class Farri implements Car {
    @Override
    public void run() {
        System.out.println("法拉利在跑");
    }
}

package com.lz.factory.simplefactory;

import com.lz.factory.factorymethod.Car;

/*
* 如果不使用工厂模式 需要依赖很多项
* **/
public class Client01 {//调用者
    public static void main(String[]args){
//        Car c1=new Audi();
//        Car c2=new Byd();
//        c1.run();
//        c2.run();
        //简单工厂模式
        Car c1=CarFactory.createCar("奥迪");
        c1.run();
        Car c2=CarFactory.createCar("比亚迪");
        c2.run();
        Car c3=CarFactory.createCar("法拉利");
        c3.run();
        Car c4=CarFactory.createAudi();
        c4.run();
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值