一、包
Java用包(package)将类组织起来。借助包可以方便地组织自己的代码,并将自己的代码与别人提供的代码库分开管理。并且可以解决名字空间、名字冲突
- 它与类的继承没有关系,实际上一个子类和其父类可以位于不同的包内
- 从编译器的角度来看,嵌套的包之间也没有任何关系。例如 java.util 包与 java,util.jar 包内毫无关系。每一个都拥有独立的类的集合
1.类的导入
一个类可以使用所属包的所有类,以及其他包的的公共类
包的导入用 import ,如导入 java.util 内的所有类
import java.util.*;
import java.util.ArrayList;
import static java.util.*;
导入包内具体的类能提高可读性。同时可以用static修饰导入此包内的所有静态成员。
2.将类放入包中
把一个类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。用 package
package hello
若没有在源文件中放置package语句,这个源文件中的类就放置在一个默认包中(default package)默认包是一个没有名字的包。
二、接口
在 Java 中,接口不是类,而是对类的一组需求描述,是类的某种特征的约定。
接口的作用:
- 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。从而在一定意义上实现了多重继承。
- 通过接口可以指明多个类需要实现的方法。
- 通过接口可以了解对象的交互界面,而不需了解对象所对应的类。
1.接口的声明与定义
接口声明如:[public] interface interfaceName [extends listOfSuperInterface]{...}
- public指明任意类均可使用这个接口,缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口。
- extends 子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法
接口值进行方法的声明,而不提供方法的实现,所以,方法定义没有方法体,且用分号隔开,定义如下
public interface Actions {
void study(); //等同于public abstract void study();
void sayHello();
String work(String workName);
}
定义的方法具有 public 和 abstract 属性,所以在定义的时候,这两个关键字可省略。
且若子接口中定义了和父接口同名的常量或相同的方法,则父接口中的常量被隐藏,方法被重载。
2.接口的实现
在类的声明中用 implements 子句来表示一个类使用某个接口,在类体中使用中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口。
import hello.Actions;
public class Student implements Actions
{
private String name;
Student(String name)
{
this.name = name;
}
public void study()
{
System.out.println("I am studying");
}
public void sayHello()
{
System.out.println("Hello my name is "+this.name);
}
public String work(String workName)
{
return workName;
}
}
3. 接口中的常量
在接口中的变量,只能是常量,具有public,static,final 属性,定义时可省去此些修饰符
4.接口一些特性
接口不是类,尤其不能使用new运算符实例化一个接口,但是却可以声明接口的变量,而接口变量必须引用实现了接口的类对象
Actions act;
act = new Student(String name);
三、抽象类和接口的区别
1.构造方法:抽象类可以有构造方法,但不能实例化,而接口是不能有构造方法。
2.方法:抽象方法可以有public、protected和default这些修饰符,而接口方法默认是public,也只能是public
3.变量:抽象方法可以有私有变量,而接口里的变量默认是public、static、final的,即常量,也只能是常量
4.继承和实现:抽象类是用来天生继承的,而Java里只支持单继承,而接口是用来实现的,Java里可以实现多个接口,提供了多重继承的大多数好处,同时还能避免多重继承的复杂性和低效性。
5.运行速度:抽象类的运行速度比接口要快一些,毕竟接口实现类里需要去查找所有的接口内的方法。
6.背后的逻辑:抽象类解决的问题是:“是不是”,而接口解决的问题是 “有没有”。即抽象类是对一种对象的高度抽象,比如有一个人的类,人要吃喝拉撒,而接口是对方法功能的抽象,比如一个如何吃的接口,一个如何喝的接口,一个如何...的接口,再用一个类去实现它,所以其背后的逻辑注重点不同,抽象类注重的是一类事物的抽象,而接口是对功能的规范(可能这就是为啥抽象类可以比较自由地定义字段,而接口里只能常量)