java-接口(java独有的)
一、接口的基本语法:
Java中的四种类型:类、接口、枚举、标注
接口(Java中的四种类型之一):特殊的抽象类(都是公开的)
1.属性都是公开静态常量 public static final
2.方法都是公开抽象方法。public abstract
3.没有构造方法
接口类代码:
package day12;
public class TestInterface {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
abstract class ClassA {
public static final int A = 10;
public static final double B=2.5;
public abstract void m1();
public abstract void m2();
}
接口关键字:interface

ClassA类与IA接口
用dos命令来运行文件,分别对应生成的类或接口的.class(字节码)文件。
对比ClassA类与IA接口,有什么区别?IA接口(自己也不能写构造方法)内容一致,区别差在ClassA类有构造方法,而IA接口却没有。
接口里的属性都是公开静态常量,所以public static final可以不写,方法也同样如此,public abstract不写也可以。
类实现接口,二者之间不能用extends关键字,需要用到implements。虽然接口与类的继承不能用到继承关键字,但是确是继承关系。
IA:接口
MyClass:接口的实现类

解决报红方法:
1)自己(abstract)成为抽象类。
2)实现接口的所有抽象方法。

一个类实现接口,如果这个类不希望成为抽象类,就必须实现接口中的所有抽象方法。在jdk8.0以后,方法有默认实现。
接口可以声明引用,但不能创建对象,因为它是抽象类。可以IA a=new MyClass();把子类给父类引用(即多态)。
二、接口和类的关系:
类和类之间有继承,接口和接口之间也能有继承(extends),类实现接口是implements。
类和类之间的继承:只支持单继承。一个类只能有一个直接父类。
接口和接口之间的继承,可以多继承。一个子接口可以同时拥有多个父接口。
一个类在继承另外一个类的同时,还能实现多个接口。
代码:
package day12;
public class TestInterface {
public static void main(String[] args) {
MyClass mc =new MyClass();
IA a=mc;
IB b=mc;
IC c=mc;
ID d=mc;
ClassE e=mc;
a.m1();
a.m2();
b.m3();
d.m3();
d.m4();
d.m5();
e.m6();
}
}
abstract class ClassA {
public static final int A = 10;
public static final double B = 2.5;
public abstract void m1();
public abstract void m2();
}
interface IA {
public static final int A = 10;
public static final double B = 2.5;
void m1();
void m2();
}
interface IB {
void m3();
}
interface IC {
void m4();
}
interface ID extends IB, IC {
void m5();
}
abstract class ClassE{
public abstract void m6();
}
class MyClass extends ClassE implements IA,ID {
public void m1() {}
public void m2() {}
public void m3() {}
public void m4() {}
public void m5() {}
public void m6() {}
}
三:多继承的复杂性:
子类引用可以直接赋值给父类引用。
父类引用需要强转才能给子类引用。
没有继承关系的两种类型不能进行强转。
代码:
package day12;
public class TestMultiInheritance {
public static void main(String[] args) {
Animal a;
Dog d;
a=new Dog();
d=(Dog)a;//强制转换 有成功的可能
// Person p=(Person)d;//狗不可能是人,强制转换只能发生在有继承关系的,不能随便强转
}
}
class Animal{
}
class Dog extends Animal{
}
class Person{
}
如果Person是接口,一个对象可以既放进狗的引用,也可以放进人的引用。
例如:
class Snoopy extends Dog implements Person{
}
强转的两种类型中,如果包含接口类型,强转代码一定编译通过。
四、接口与多继承:
类可以单接口多实现。
接口实现多继承?有多继承的逻辑,也保证了树的简单性。根本上,接口的出现并不是为了多继承。
五、接口的解耦合
接口主要作用:接口的方法都是抽象的话,接口成为一种标准。接口中的方法都是没实现的,只规定了做什么,没有规定怎么做。
标准的出现是为了解耦合。
什么是耦合?对象之间和对象之间会形成联系,耦合:对象和对象之间的紧密程度。
松散:弱耦合 联系弱 人和眼镜 比较好
紧密:强耦合 切不断 人和眼球
接口作为标准,使接口的使用者和接口的实现者分离,实现弱耦合关系。
代码例子:
package day12; public class TestInterface2 { public static void main(String[] args) { Light light=new Light(); RedBulb bulb1=new RedBulb(); light.setBulb(bulb1);//把灯泡安装到台灯上,建立两者的关联关系 light.powerOn(); YellowBulb bulb2=new YellowBulb(); light.setBulb(bulb2); light.powerOn(); } } class Light{ private Bulb bulb; public void setBulb(Bulb bulb) { this.bulb=bulb; } public void powerOn() { bulb.shine(); } } interface Bulb{ void shine(); } class RedBulb implements Bulb{ public void shine() { System.out.println("发出红光"); } } class YellowBulb implements Bulb{ public void shine() { System.out.println("发出黄光"); } }
运行结果:


浙公网安备 33010602011771号