1.接口
通过interface关键字修饰的java元素就是接口。
格式:public interface 接口名{}
interface 接口名{}
package com.wangxing.test3;
//抽象类
public abstract class TestClass {
//抽象方法
public abstract void info();
}
2.为什么要有接口?
为了克服java的单继承,接口可以被实现多个
例如:收费,出租车有收费功能【1元/公里】,飞机有收费功能【全程1000元】
出租车与飞机不是同一类事物,但是有相同的功能
接口实际上就是提供不同类型事物的公共内容,由接口的子类根据自身的实际情况,来实现这个接口提供的公共内容。这样子类就不需要创建这个公共内容,只需要继承来重写一下就好。
3.接口中的元素
接口中可以有常量、静态方法、抽象方法。
1、接口中变量一定是 public static final修饰的常量。
2、接口中的静态方法一定是public修饰的,public可以被省略。
3、接口中的抽象方法一定是public abstract修饰的,public abstract可以省略
4.接口的用法
1.接口不能new,如果需要访问抽象方法需要借助接口子类
2.类可以通过implements关键字去实现一个/多个接口
3.普通的类去实现一个/多个接口,就需要将每一个接口中的抽象方法重写,否则就需要将这个普通的类改成抽象类.
4.抽象类去实现一个/多个接口,不需要重写接口中的抽象方法。
5.接口可以继承接口,并且可以继承父接口中的所有元素.
6.利用接口回调对象创建出接口对象
7.当某一个普通的java类中的方法参数是接口类型的时候,可以传递接口回调对象,也可以是接口的子类对象。
5.接口回调对象
接口回调对象与上转型对象很相似
接口回调对象--接口的子类对象赋值给接口变量
1.接口回调对象只能访问接口的抽象方法,实际上访问子类重写以后的抽象方法
2.接口回调对象不能访问子类本身的方法,如果要访问就需要强制类型转换
例如,父类:package com.wangxing.test4;
public abstract class ShuiGuo {
public abstract void eat();
}
子类:package com.wangxing.test4;
public class XiangJiao extends ShuiGuo{
public void eat(){
System.out.println("我是香蕉,剥了皮吃");
}
}
二子类:package com.wangxing.test4;
public class XiGua extends ShuiGuo {
public void eat(){
System.out.println("我是西瓜,切开吃");
}
}
主程序:package com.wangxing.test4;
public class NongChang {
public static ShuiGuo sellShuiGuo(String name){
ShuiGuo sg=null;
if(name.equals("香蕉")){
sg=new XiangJiao();
}
if(name.equals("西瓜")){
sg=new XiGua();
}
return sg;
}
}
测试:package com.wangxing.test4;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("你好,你需要点什么?");
Scanner input = new Scanner(System.in);
String name=input.next();
ShuiGuo sg=NongChang.sellShuiGuo(name);
sg.eat();
}
}
抽象类与接口的区别?
作业: 参考抽象类中的卖水果实例,使用接口改。