还是写一下本周的学习内容吧。首先是抽象类:一、如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。二、如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。例子:
public abstract class Employee
{
private String name;
private String address;
private int number;
public abstract double computePay();//****抽象方法
//其余代码
}
【1】如果一个类包含抽象方法,那么该类必须是抽象类。
【2】任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
【3】继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。【4】最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
***抽象类总结规定:
1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
然后是接口:接口与类相似点:
【1】一个接口可以有多个方法。
【2】接口文件保存在 .java 结尾的文件中,文件名使用接口名。
【3】接口的字节码文件保存在 .class 结尾的文件中。
【4】接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
【1】接口不能用于实例化对象。
【2】接口没有构造方法。
【3】**接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关【4】键字修饰的非抽象方法。
【5】接口不能包含成员变量,除了 static 和 final 变量。
【6】接口不是被类继承了,而是要被类实现。
【7】接口支持多继承。
接口特性
【1】接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
【2】接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
【3】接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类和接口的区别
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
注:JDK 1.8 以后,接口里可以有静态方法和方法体了。
注:JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。更多内容可参考 Java 8 默认方法。
注:JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。更多内容可参考 Java 9 私有接口方法。
接口的声明:
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
1)接口语法:
...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
2)在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:
public interface Hockey extends Sports, Event
ok,这两块知识比较重要,当然本周还有很多学习的东西就不一一陈述了。