【Java】让我们对多态有深入的了解(九)

目录

(1)接口的基本介绍​编辑

(2)接口的注意事项和细节

1.接口不能被实例化

2.接口中所有方法是public方法,接口中的抽象方法,可以不用abstract修饰

3.一个普通类实现接口,必须将接口所有的抽象方法都实现。

4.抽象类实现接口,可以不用实现接口的方法

5.一个类同时可以实现多个接口 

 6.接口中的属性,只能是final,而且是public static final修饰符

7.一个接口不能继承其他的类,但是可以继承多个别的接口。

 (3)接口和继承的区别

 (4)接口的多态性


(1)接口的基本介绍

 在接口类中可以有三种方法,分别为抽象、默认、静态,举例如下:

interface example{
    abstract int a();//抽象方法,如果没有写abstract,则其也会默认为abstract。
    default void b(){//默认方法
        
    };
   public static void c(){//静态方法

   }
}

而在实现类中,除了必须要实现的抽象类,还可以有自己的属性和方法。举例如下: 

interface example{
    abstract int a();//抽象方法,如果没有写abstract,则其也会默认为abstract。
    default void b(){//默认方法

    };
   public static void c(){//静态方法

   }
}
class iA implements example{
   int number=10;//自己的成员属性
   public void b(){//自己的成员方法
       System.out.println("这是在函数b");
   }
   
    public int a() {//实现抽象方法
        return 0;
    }
}

(2)接口的注意事项和细节

1.接口不能被实例化

interface example{
    
}

public class Main {
    public static void main(String[] args) {
        example example = new example();//接口不能被实例化


    }
}

2.接口中所有方法是public方法,接口中的抽象方法,可以不用abstract修饰

interface example{
  void a();//默认为abstract
}

3.一个普通类实现接口,必须将接口所有的抽象方法都实现。

4.抽象类实现接口,可以不用实现接口的方法

interface example{
  void a();//默认为abstract

}
abstract class iB implements example{//如果是一个抽象类实现接口,则可以不去实现接口的方法
    
}

5.一个类同时可以实现多个接口 

interface example{
}
interface example2{

}
abstract class iB implements example,example2{//一个类同时可以实现多个接口 

}

 6.接口中的属性,只能是final,而且是public static final修饰符

interface example{
    int a=10;//默认为public static final int a=10
}
public class Main {
    public static void main(String[] args) {
        System.out.println(example.a);


    }
}

7.一个接口不能继承其他的类,但是可以继承多个别的接口。

interface a{
    
}
class b{

}
interface c extends a{//这是正确的,接口可以继承其他的接口

}
interface d extends b{//这是错误的,接口不能继承其他的普通类
    
}

 (3)接口和继承的区别

很多人这时候觉得接口没有比继承比nb多少嘛,不就多个抽象方法嘛。假如有三个人,他们分别会编程、弹钢琴、健身,有一个儿子想拜干爹想学习他们的技能。如果用继承关系,是is-a的关系,这个人只能继承一个类,也就是学习一种技能。如果用继承同时实现三种则会报错,如下图。

 用接口则可以实现一个类去实现多个接口的方法,他们的关系是like-a。

 (4)接口的多态性

用生活中的一个实际例子,假如我们有手机、相机、电脑,我们想把手机和相机接入到电脑上,要怎么样接入呢?在现实我们知道用电脑上有usb接口直接插上就行。在编程中,我们首先则要一个接口定义usb规格,然后在手机和相机类去实现这个接口,最后在电脑中定义一个可以调用接口的方法。

interface usbinterface{//一个接口
    void use();
}
class phone implements usbinterface{//手机实现接口
    @Override
    public void use() {
        System.out.println("手机接入");
    }
}
class camera implements usbinterface{//电脑实现接口
    @Override
    public void use() {
        System.out.println("相机接入");
    }
}
class comperter{
    public void work(usbinterface usbinterface1){//定义可以调用接口的方法
        usbinterface1.use();
    }
}
public class Main {
    public static void main(String[] args) {
        comperter comperter = new comperter();
        phone phone = new phone();
        camera camera = new camera();
        comperter.work(phone);//体现了多态性
        System.out.println("====================");
        comperter.work(camera);//体现了多态性
        
    }
}

接口多态数组的体现

interface usbinterface{//一个接口
    void use();
}
class phone implements usbinterface{//手机实现接口
    @Override
    public void use() {
        System.out.println("手机接入");
    }
    public void call(){//手机的功能
        System.out.println("可以打电话");
    }
}
class camera implements usbinterface{//电脑实现接口
    @Override
    public void use() {
        System.out.println("相机接入");
    }
    public void picture(){//相机的功能
        System.out.println("可以照相");
    }
}
class comperter{
    public void work(usbinterface usbinterface1){//定义可以调用接口的方法
        usbinterface1.use();
    }
}
public class Main {
    public static void main(String[] args) {
        comperter comperter = new comperter();
        usbinterface []usbinterfaces = new usbinterface[2];
        usbinterfaces[0]=new phone();//体现了多态性
        usbinterfaces[1]=new camera();//体现了多态性
        if(usbinterfaces[0] instanceof phone){//如果运行类型为phone类则向下转型调用手机的方法
         ((phone) usbinterfaces[0]).call();
        }
        if(usbinterfaces[1] instanceof camera){
            ((camera)usbinterfaces[1]).picture();//如果运行类型为camera类则向下转型调用手机的方法
        }
        

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值