Java面向对象进阶——接口

1.接口

在Java中,接口(interface)是一种抽象类型,用于定义类所具有的方法但不提供方法的实现。接口定义了一组方法的规范,而不关心这些方法如何实现。接口通常用于描述类应该具有的行为,而不是具体的实现细节。

总的来讲,接口就是一种规则,当需要给多个类同时定义规则时就需要用到接口。

2.接口和抽象类的异同

Java 中的接口(interface)和抽象类(abstract class)是两种实现多态的方式,它们有着一些相似之处,也有一些明显的区别:

相同之处:

  1. 都不能直接实例化: 接口和抽象类都不能直接被实例化,即不能通过 new 关键字来创建它们的对象。

  2. 都可以包含抽象方法: 接口和抽象类都可以包含抽象方法,这些方法在接口中是没有实现体的,而在抽象类中可以有实现体。

  3. 都支持多态: 通过接口和抽象类,可以实现对象的多态性,即一个对象可以表现出多种形态。

不同之处:

  1. 成员变量: 接口中只能包含常量(即 public static final)类型的成员变量,而抽象类中可以包含各种类型的成员变量。

  2. 构造方法: 接口中不能包含构造方法,而抽象类中可以包含构造方法。

  3. 继承关系: 一个类只能继承一个抽象类,但可以实现多个接口。

  4. 方法实现: 在接口中,所有的方法都是抽象方法,没有方法体;而在抽象类中,可以包含抽象方法也可以包含具体方法的实现。

  5. 用途: 接口用于描述类所具有的方法而不涉及具体实现,通常用于实现类之间的契约;而抽象类通常用于创建子类的模板,提供一些通用的方法和字段,同时又可以定义一些子类必须实现的抽象方法。

总的来说,接口主要用于实现多重继承、定义类之间的契约和实现多态;而抽象类主要用于作为子类的模板,提供通用的方法和字段,并通过继承和覆写来实现多态。

3.接口的定义和使用

  • 接口用关键字interface来定义:public interface 接口名{}
  • 接口不能实例化
  • 接口和类之间是实现关系,要通过implements关键字表示:
    • public class 类名 implements 接口名 {}
  • 接口的子类(实现类)
    • 要么重写接口中的所有抽象方法
    • 要么是抽象类

注意1:接口和类的实现关系,可以单实现,也可以多实现。

                public class 类名 implements 接口1,接口2 {}

注意2:实现类还可以在继承一个类的同时实现多个接口。

                public class 类名 extends 父类 implements 接口1,接口2 {}

4.练习:编写带有接口和抽象类的标准Javabean类

代码如下:

// Animal类
public abstract class Animal {
     String name;
     int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //定义抽象方法
    public abstract void eat();

}


//游泳Swim接口
public interface Swim {
    public abstract void swim();
}

// 兔子Rabbit类
public class Rabbit extends Animal{
    public Rabbit() {
    }
    public Rabbit(String name,int age){
        super(name,age);
    }

    @Override
    public void eat(){
        System.out.println(name+"在吃胡萝卜");
    }
}

// 青蛙Frog类
public class Frog extends Animal implements Swim{
    public Frog() {
    }

    public Frog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat(){
        System.out.println(name+"在吃虫子");
    }
    @Override
    public void swim(){
        System.out.println(name+"会蛙泳");
    }
}

// 狗Dog类
public class Dog extends Animal implements Swim{
    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat(){
        System.out.println(name+"在吃骨头");
    }
    @Override
    public void swim(){
        System.out.println(name+"会狗刨");
    }
}

// 测试类Text
public class Text {
    public static void main(String []args){
        // 创建青蛙的对象
        Frog f = new Frog("小青",1);
        System.out.println(f.getName()+","+f.getAge());
        f.eat();
        f.swim();

        // 创建兔子的对象
        Rabbit r  = new Rabbit("小白",2);
        System.out.println(r.getName()+","+r.getAge());
        r.eat();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值