接口
- 创建一个Java project ,创建具体的包com.qcby.interface、创建一个普通的class类文件命名为person,public是访问权限修饰符,class是一个关键字,person一个类所在的命名空间。
- 类里面主要包含两种东西,一种是属性、一种是方法。
- 在person里创建两个私有属性:
privateString name;
private intage;
在创建一个动作和行为(方法):
public void eat(){
System.out.println("吃饭");
}
- 此时不想将动作描述的过于具体,所以使用抽象类,但重要的是行为抽象方法和非抽象方法的区别是抽象方法,抽象方法怎么能够不具体,不提供实现就可以了,把大括号去掉(去掉方法体)
public abstract void eat();这就是一个抽象方法
- 一个抽象的方法能存放的的地方只能是抽象类,但是抽象类中不一定有、不都是抽象方法
如果把一个方法确定了就不能更改了,但是抽象类还能有修改的余地更为的灵活
- 什么是接口?
新建一个interface,类更具体,接口更抽象。
如果想让一个类里面只有方法,并且方法都是抽象方法的话,那就不需要创建类了,可以直接创建interface,接口里的方法
public interface Run(){
public void run();
public int eat();
}
接口只需要定义方法名是什么,方法的返回是什么,方法有返回值就是具体的类型,方法没有返回值就是void。也就是在具体实现里不需要写了,只要告诉步骤先后就好,具体步骤不需要做,谁实现谁做。
接口里面不能写属性,只能定义抽象方法和常量,定义常量时必须赋值。可以定义变量但是只能以常量的形式,不能是属性的形式,接口类似于抽象类的优化。
接口不能new,不能实例化,不存在对象属性、类属性,只能看做常量来使用
接口不能直接使用一定要有一个承接者例如一个类,类和类之间是继承的,类和接口之间是靠implements来连接的
接口的诞生就是用来完成的,所以一个类要去实现某个接口的话,这个类必须要去实现接口里的所有方法。就像一个类继承了一个抽象类,那么这个类就要把抽象类里的抽象方法实现,因为抽象类里的抽象方法就等待着被继承被实现。但如果类实现了一个接口,但是不想去具体实现,那么将这个类变为抽象类也是可以不实现的。
接口就是像是一个规则一个标准,不能定义的太死板,否则继承其的人很难去实现。
可以这么去书写
接口是可以实现多实现的,类似继承多个。
类为什么不能多继承是因为,如果两个父类拥有相同的方法,因为继承是可以把父类方法重写的,类里面的方法已经落实了,子类无法判断使用哪个。
一个类继承一个接口,然后再继承一个类再实现一个接口是可以的
package com.qcby.interfacedemo;
public interface Run {
public void run();
}
package com.qcby.interfacedemo;
public interface Eat {
void eat();
}
package com.qcby.interfacedemo;
public interface Eat {
void eat();
}
package com.qcby.interfacedemo;
public class Cow extends Animal implements Run,Eat{
@Override
public void run() {
// TODO Auto-generated method stub
}
@Override
public void sleep() {
// TODO Auto-generated method stub
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
@Override
public void jump() {
// TODO Auto-generated method stub
}
}