Java面向对象基础(7-接口)

接口

抽象方法的本质是定义接口规范:即规定上层接口规范,让子类去继承实现抽象方法。
接口定义:如果一个类中没有字段,并且所有方法都是抽象方法,那么这个类可以改写成接口interface,如下:

abstract class Student{
    public abstract void Hello();
    public abstract String getName();
    public abstract int getAge();
}

那么这个类就可以改写成接口:interface
Java中用interface来声明一个接口。

interface Student{
    void Hello();
    String getName();
    int getAge();
}

其中修饰方法的public abstract可以省略不写。

接口interface是一个纯抽象的,他没有字段,只有抽象方法。
用一个类来实现一个接口时,需要用到关键字implements,一个类可以继承多个接口。

interface Student{
    void Hello();
    String getName();
    int getAge();
}
interface Person{
    void run();
}
class Stu_Ming implements Student,Person{
    private int age;
    private String name;
    public void Hello(){
        System.out.println("Hello World");
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public void run(){
        System.out.println("I am running!");
    }
}

用一个接口来继承接口时,需要用到关键字extends,一个接口可以继承多个接口。

interface Student{
    void Hello();
    String getName();
    int getAge();
}

interface Person extends Student{
    void run();
}
abstract classinterface
继承只能extends一个类可以implements多个interface
字段可以定义实例字段不能定义实例字段
抽象方法可以定义抽象方法(abstract)定义的均为抽象方法(默认public abstract
非抽象方法可以定义非抽象方法可以定以default方法
  1. interface 不能定义变量,但是可以定义常量,默认修饰符为public static final,全局静态常量,必须在定义时初始化,且初始化之后不能改变,可以通过接口名.常量的方法进行访问。
  2. 接口的命名规则与类型不同,如果修饰符是public,那么该接口在整个项目中可见;如果省略修饰符,那么该接口只能在该包可见。
  3. interface中不能有构造函数。
  4. 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
  5. 当一个类同时extends一个父类和implements多个接口时,extends必须位于implements之前。
  • default方法
    default修饰方法只能在接口中使用,在接口中被default标记的方法为普通方法,可以直接写方法体。
  1. 实现类会集成接口中的default方法
public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.Hello();
    }
}

interface Person{
    public default void Hello(){
        System.out.println("Hello world!");
    }
}

class Student implements Person{

}

输出:
Hello world!

  1. 如果一个类同时实现接口Person和Animal,接这两个接口中有相同的default方法,这时,必须重写接口中的default方法
public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.Hello();
    }
}

interface Person{
    public default void Hello(){
        System.out.println("Hello Person!");
    }
}
interface Animal{
    public default void Hello(){
        System.out.println("Hello Animal!");
    }
}
class Student implements Person,Animal{
    public void Hello(){
        System.out.println("Hello Student!");
    }
}

输出:
Hello Student!

重写的原因:类在继承接口中的default方法时,不知道该继承哪一个接口的default方法。

  1. 子类同时继承父类和接口,且父类和接口中都有Hello方法(接口的用default修饰),那么子类会继承父类的Hello方法而不是接口的方法。
public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.Hello();
    }
}

interface Person{
    public default void Hello(){
        System.out.println("Hello Person!");
    }
}
class Animal{
    public  void Hello(){
        System.out.println("Hello Animal!");
    }
}
class Student extends Animal implements Person{

}

输出:
Hello Animal!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值