接口
- 接口的关键字是 interface ;
public interface IShape{
int number;
void draw();
}
这几点是非常重要的:
- 接口当中的方法全部不能有具体的实现;并且都是抽象方法——默认public abstract
- ALBB要求接口当中的方法尽量简洁;
- 接口当中的成员变量默认为 public static final 的;必须要进行初始化;
- 接口是不能被实例化的;不可以 new ;
- 接口存在的意义就是为了被继承;
- 接口和接口是可以 extends 继承的;
接口和类之间的关系————》实现: implements
- 只要普通类实现这个接口,那么接口中的方法必须重写;
class Rect implements IShape{
@override
public void draw(){
System.out.println("画");
}
}
这是一个错误示例!!!!!
interface IShape {
abstract void draw() ; // 即便不写public,也是public
}
class Rect implements IShape {
void draw() {
System.out.println("□") ; //权限更加严格了,所以无法覆写。
}
}
向上转型
- 只要类和接口之间存在实现的关系,就可以发生向上转型;
(扩展) extends 和 (实现) implements
-
扩展指的是当前已经有一定的功能了, 进一步扩充功能;
-
实现指的是当前啥都没有, 需要从头构造出来;
-
用接口实现多继承的功能
interface IFlying {
void fly();
}
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
class Cat extends Animal implements IRunning {
public Cat(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name + "正在用四条腿跑");
}
}
// extends 和 implements 的前后顺序不能交换;
抽象类和接口的区别
(关于抽象类的相关知识大家可以动动小手翻一下我的上一篇博客,里面基本都有讲到,如果有遗漏欢迎大家评论给我,我会补充上的!!!)
1、结构组成
- 抽象类:普通类+抽象方法;
- 接口:抽象方法+全局变量;
2、权限
- 抽象类:各种权限;
- 接口:public;
3、子类使用
- 抽象类:使用extends关键字继承抽象类;
- 接口:使用implements关键字实现接口;
4、关系
- 抽象类:一个抽象类可以实现若干个接口;
- 接口:接口不能继承抽象类,但是接口可以使用extends关键字继承多个父接口;
5、子类限制
- 抽象类:一个子类只能继承一个抽象类;
- 接口:一个子类可以实现多个接口;
Comparable 接口:
- 自定义类型进行排序的时候,一定要实现Comparable接口(implements),并且要重写compareTo方法
class Student implements Comparable<Student>{
public String name;
public int age;
public double score;
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
@Override
public int compareTo(Student o) {
return this.age-o.age;
//return (int)(this.score - o.score);
//return this.name.compareTo(o.name);
}
}
Cloneable 接口:
- Cloneable接口中没有抽象方法————》空接口(标记接口):标志当前类可以克隆
class Money implements Cloneable{
double m = 12.9;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class Person implements Cloneable{
public String name;
Money money;
public Person() {
}
public Person (String name) {
this.name = name;
this.money = new Money();
}
@Override
protected Object clone() throws CloneNotSupportedException {
Person p = (Person) super.clone();
p.money = (Money) this.money.clone();
//return super.clone();
return p;
}
}