JAVA基础笔记——接口

JAVA基础笔记——接口,第1张

1-1总述

1、接口也是一种引用数据类型。

2、接口是完全抽象的(抽象类是半抽象,接口是特殊的抽象类)

基础语法:

[修饰符列表] interface 接口名{

}

3、接口支持多继承,一个接口可继承多个接口

4、接口中只有两部分内容:抽象方法、常量。

5、接口中所有元素都是public修饰(都是公开的)

6、抽象方法定义时:public abstract可以省略

常量定义时:public static final可以省略,常量不能被重新赋值,接口中随便写一个值就是常量。

7、接口中的方法都是抽象方法,不能有方法体(即不存在实例方法)

8、类和接口之间称为实现,immplents关键字。(可理解为多态)

9、由于接口是特殊的抽象类,当非抽象类实现接口时,必须实现接口中的抽象方法,重写方法时,其方法访问权限必须更高

10、接口也是特殊类,也可以作为某类的一个属性,但必须实现才能实例化

public class inter implements A{
   public int sum(int a,int b){
        return  a+b;
    }
}
interface A{
    int i=5;
    int sum(int a,int b);
}

若删掉重写方法中的public,则访问权限变低了,会报错。

接口内的多态:

A pd=new inter();
int m=pd.sum(5,5);

接口引用指向继承子类对象实体

10、一个类可以同时实现多个接口,这种机制弥补了单继承带来的缺陷,实现多接口类似于多继承

小插曲:被一个类实现的不同接口A、B,A可以向下转型为B,运行通过。

经过测试:接口和接口之间进行强制类型转换的时候,没有继承关系,也可以强转。但是有可能运行时会出现ClassCastException.

之前结论:无论向上转型还是向下转型,两种类型间必须有继承关系,不然编译无法通过(这个结论在接口中不适用),但最好在转型前加instanceof运算符进行判断。

A a= new inter();
if(a instanceof B) {
    B b = (B) a;
}

11、继承和实现都存在:

public class inter extends animal implements A,B

继承在前,实现在后

1-2 接口在开发中的作用

面向抽象编程——面向接口编程

有了接口可插拔,扩展能力强,低耦合度,符合OCP开发原则

Cat is a animal, 但凡满足is a的表示都可以设置为继承

Customer has a menu/ Customer use menu to food, 但凡以这种逻辑方式存在(即A对象拥有B,B可以是一种对象引用,一个接口引用,一个数值等其他变量)都以属性的形式存在.

interface  Foodmenu{
    void zhongcan();
    void xican();
}
class customer implements Foodmenu{
    Foodmenu a;
    inter b;
    public void zhongcan() { }
    public void xican() { }
    public static void main(String[] args) {
        inter c;
    }
}

顾客使用菜单获得食物,所以可把菜单接口作为属性,则 a 为实例变量(属于成员变量),存在堆中,b也为实例变量,而c在方法体中声明,为局部变量,存在于栈中。

接口一定离不开多态:因为接口的引用只能指向实现它的类实体——向上转型

面向抽象编程:接口的运用

interface Foodmenu{
    void food();
}
public class  Chinesecooker implements Foodmenu{ //中餐厨师实现该菜单接口,重写相应的食物方法
    public void food() {
        System.out.println("中餐:鱼香肉丝");
    }
}
public class Westerncooker implements Foodmenu {  //西餐厨师实现该菜单接口,重写相应的食物方法
    public void food() {
        System.out.println("西餐:六分熟牛排");
    }
}

public class Customer {
    private Foodmenu foodmenu ;  //接口引用作为私有变量,向下转型,多态
    public Customer(Foodmenu foodmenu) {  //顾客类将菜单接口作为其属性,通过该菜单接口点不同种类的菜
        this.foodmenu = foodmenu;
    }
   public Customer(){

   }
   public Foodmenu  getFoodmenu() {
        return foodmenu;
    }
    public void setFoodmenu(Foodmenu foodmenu) {
        this.foodmenu = foodmenu;
    }
    public void order(){
        foodmenu.food();
    }
}
public class Vartest {
    public static void main(String[] args) {
        Foodmenu cooker1=new Chinesecooker();  //接口的向下转型,指向实现它的Chinesecooker类
        Customer c=new Customer(cooker1);
        c.order();
        Foodmenu cooker2=new Westerncooker();
        c.setFoodmenu(cooker2);
        c.order();
    }
}

上述中/西餐厨师——菜单——顾客为面向接口的抽象编程的一个实例应用。

接口可以将接口调用者和实现者解耦和,调用者(customer)不用管实现者(Chinesecooker/Westerncooker).

上述例子厨师实现菜单接口,顾客调用该菜单接口。

模块和模块之间采用接口衔接,降低耦合度。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/801185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存