JAVA学习(2)

2022-08-03 14:21:31 浏览数 (1)

接口 Interface

类的规范:只规定应含有哪些方法,而不负责具体实现。

代码语言:javascript复制
public interface Move{  
    // abstract 方法                   
    public void go(String loc);
    // default 方法                                 
    default void stop() {      
        System.out.print("stop");
    };                  
}Copy to clipboardErrorCopied
  1. 声明接口:必须且默认为 static final,通常为 public 。
  2. 只允许声明静态常量:必须且默认为 public static final 。
  3. 声明抽象方法:必须且默认为 abstract ,可以为 static。

JDK 1.8 以前,接口中抽象方法必须且默认为 public,不允许实现任何方法。 JDK 1.8 以后,接口中抽象方法可以且默认为 default,且允许实现 static 和 default 方法。 JDK 1.9 以后,接口中抽象方法可以是 private。*

抽象声明

  • abstract 方法:只有声明,而没有方法的具体实现。
  • abstract 类:类的模板,不能实例化对象。必须由其他类继承才能使用。
代码语言:javascript复制
public abstract class Vehicle {
    // 声明变量
    String brand;
    // 声明并实现方法
    public void go(String loc){
        System.out.print("go to"   loc);
    }   
}Copy to clipboardErrorCopied
接口和抽象类的区别
  1. 接口不能实现普通方法,抽象类可以实现具体的方法、也可以不实现。
  2. 接口只能定义静态常量,抽象类可以定义非静态变量。
  3. 一个实体类可以实现多个接口,但只能继承一个抽象类。

更新声明

  • default 方法:更新接口时添加的新方法,允许旧类实现接口而不实现该方法。
    • 可以直接在接口内实现,供没有定义的旧类直接使用。若类中实现了该方法则覆盖。
    • 如果类实现了多个接口且拥有同名 default 方法:
      1. 两个接口若存在继承关系,调用时优先使用子类方法。
      2. 否则,必须重写子类 default 方法,通过 super 关键字明确实现哪个接口:
代码语言:javascript复制
class Plane implements Move, Fly{
    ...
    void go(){
        Fly.super.go();                 // 实现选定 default 方法
    }
}Copy to clipboardErrorCopied

包 Package

命名空间,表示 java 文件的存储路径。其路径记录在每个 java 文件首。

代码语言:javascript复制
package com.company.project.module;                    // 声明存储路径Copy to clipboardErrorCopied

导入 import

在 java 文件中,如果要调用其他 java 文件中定义的类 / 接口,就需要进行导入:

  • 同一存储路径(包)下的 java 文件不需要导入,可以直接调用。
  • 已默认导入 java.lang 路径下所有 java 文件,包含 System、String、Object、Math 等常用类。
  • 如果没有导入对应 java 文件,或者导入了多个同名 java 文件,在调用类 / 接口时需要标明路径。
代码语言:javascript复制
package com.company.project.module;  

import java.util.Scanner;                             // 导入 java 文件,但不包括内部 static 变量和方法
import java.net.*;                                    // 导入路径下所有 java 文件,但不包括下属文件夹
import static java.lang.Math.PI;                      // 导入 java 文件中的 static 变量或方法

public class Test{
    public void main(String[] args){
        java.io.InputStream in = new java.io.InputStream(System.in);    // 未导入类,调用时需要标明路径
        Scanner sc = new Scanner(in);                                   // 已导入类,可直接调用
        Integer n = sc.nextInt();                                       // 默认导入类,可直接调用
        sc.close();           
    }
}

0 人点赞