"[图片] 接口的继承和实现 接口的继承 接口可以继承接口,而且可以多继承,只有类继承类才是单继承。 public interface Person { String age = '24'; void age(); } public interface SuperMan { String name = '张三'; voi .."

接口、抽象类的继承与实现和执行顺序详解

接口的继承和实现

接口可以继承接口,而且可以多继承,只有类继承类才是单继承

public interface Person {  
    String age = "24";  
    void age();  
}
public interface SuperMan {  
    String name = "张三";  
    void name();  
}
public interface Father extends SuperMan, Person {  
}

同时子接口不需要重写父接口的方法,可以定义自己的方法,接口中可以定义变量,不过默认是被 static final 修饰的,所以接口中的变量其实就是静态常量。上面说到的接口SuperMan等同于:

public interface SuperMan {  
    static final String name = "张三";  
    void name();  
}

接口没有构造器,不能被实例化,所以想要调用接口中封装的方法必须实现接口。

public class Man implements Father{  
    @Override  
    public void age() {  
    }  
    @Override  
    public void name() {  
    }  
    public static void main(String[] args) {  
        System.out.println(Father.age);  
        System.out.println(Father.name);  
        System.out.println(Person.age);  
        System.out.println(SuperMan.name);  
    }  
}

实现类必须实现父接口中的方法,以及父接口继承的所有方法。

抽象类

普通类可以被实例化,并且包含有参构造方法、无参构造方法、静态方法、普通方法、静态变量、普通变量、静态代码块、普通代码块。

在所有的普通方法定义中都会有一个大括弧“{}”,中间包含的内容称作方法体,有方法体的方法一定可以被对象直接调用。而抽象方法,是指在方法的定义中没有方法体并且必须被关键词abstract所修饰的方法。拥有抽象方法的类就是抽象类,抽象类要使用 abstract 关键字声明。

public abstract class Man implements Father {  
    protected void water() {  
       // 普通方法  
       System.out.println("存在方法体");  
    }  
    protected abstract void food();// 抽象方法没有方法体  
    static {  
       System.out.println("Man 静态代码块");  
    }  
    {  
       System.out.println("Man 普通代码块");  
    }
    protected Man() {  
       // 抽象类构造器  
       System.out.println("Man 无参构造方法");
    }  
}

抽象类不能被new关键词实例化,但是在抽象类的子类实例化时会先调用父类的无参构造方法。

public class Women extends Man {  
    private static final Women instance = new Women();  
  
    @Override  
    protected void food() {  
    }  

    @Override  
    public void age() {  
    }  
  
    @Override  
    public void name() {  
    }  
  
    public static void main(String[] args) {  
        System.out.println(Women.instance);  
    }  
}

console 控制台打印如下

  Man 静态代码块
  Man 普通代码块
  Man 无参构造方法
  com.szlanlingtong.com.mall.model.common.test.Women@3fee733d

  Process finished with exit code 0

可以看到代码的执行顺序是

父类静态代码块 -> 父类普通代码块 -> 父类无参构造 -> 子类方法

上面的代码可以看到抽象类可以不实现接口中的方法,但是普通类必须实现接口中的所有方法及抽象类中的所有抽象方法。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2148 引用 • 7240 回帖 • 1058 关注
  • 接口
    13 引用 • 75 回帖
  • 抽象类
    2 引用 • 1 回帖
感谢    关注    收藏    赞同    反对    举报    分享
1 回帖    
请输入回帖内容...
  • kafuly    

    比心心

    感谢    赞同    反对    举报    分享       回复