Java学习笔记(十七)
接口的使用
1.接口使用interface来定义;
2.Java中,接口和类是并列的两个结构;
3.如何定义接口:
3.1 JDK7以前:只能定义全局常量和抽象方法;
》全局常量:public static final的
》抽象方法:public abstrate的
3.2JDK8:增加定义静态方法,默认方法
4.接口中不能定义构造器;
5.在Java开发中,结构通过让类去实现(implements)的方式来使用。
》如果实现类覆盖了接口中所有的抽象方法,此实现类可以实例化;若不全覆盖,则为一个抽象类;
6.Java类可以实现多个接口----》弥补了Java类多继承性;
格式:class AA extends BB implements CC,DD,EE{
}
7.接口与接口之间可以多继承;
8.接口的使用,体现多态性;
9.接口可以看作一种规范;
public class InterfaceTest {
public static void main(String[] args) {
System.out.println(walk.speed1);
System.out.println(walk.speed2);
// walk.speed2 = 40;
Plane plane = new Plane();
plane.start();
plane.end();
}
}
interface walk{
public static final int speed1 = 10;
int speed2 = 20;
// speed2 = 30;
public abstract void start();
void end();
}
interface jump{
void number();
}
class Plane implements walk{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("五百米处开始");
}
@Override
public void end() {
// TODO Auto-generated method stub
System.out.println("一千米出结束");
}
}
class Person implements walk,jump,CC{
@Override
public void start() {
// TODO Auto-generated method stub
}
@Override
public void end() {
// TODO Auto-generated method stub
}
@Override
public void number() {
// TODO Auto-generated method stub
}
@Override
public void aa() {
// TODO Auto-generated method stub
}
@Override
public void bb() {
// TODO Auto-generated method stub
}
}
interface AA{
void aa();
}
interface BB{
void bb();
}
interface CC extends AA,BB{
}
/*
* 1.接口的使用体现了多态性;
* 2.接口可以看作一种规范;
*/
public class USBTest {
public static void main(String[] args) {
Computer com = new Computer();
Flash flash = new Flash();
com.transferData(flash);
}
}
class Computer{
public void transferData(USB usb) {
usb.start();
System.out.println("传输细节");
usb.stop();
}
}
interface USB{
void start();
void stop();
}
class Flash implements USB{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("U盘开始工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("U盘结束工作");
}
}
class Printer implements USB{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("打印机开始工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("打印机结束工作");
}
}
JDK8补充:
1.接口中定义的静态方法,只能通过接口调用;
2.通过实现类的对象,可以调用接口中的默认方法;
3.实现类重写了接口的方法,调用时,仍然调用的是重写后的方法;
4.如果子类或实现类继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的方法。这是类优先原则。如果在实现类中,是接口和接口之间的同名同参数方法冲突的话,就会报错。
5.如何在子类(或实现类)的方法中调用父类、接口中被重写的方法;接口.super.方法