小计:
没有多态就没有抽象,没有抽象就没有接口,没有接口就没有java
子类引用赋值给父类引用,可以直接赋值。
父类引用给子类引用,必须强转。
强转,两边都是接口,或者右边是接口,编译器可以通过
接口没有实现对象,接口的实现类才有对象
1、接口:
特殊的抽象类
1)所有的属性都是公开静态的常量 可以省略修饰符
2)所有的方法都是公开抽象的方法 可以省略修饰符
3)没有构造方法
ClassA比IA多一个构造方法。
一个类去实现接口,如果这个类不希望也成为抽象类,就必须实现接口中的所有方法。
package chp8;
public class TestInterface{
public static void main(String[] args){
/*IA a=new Impl();
a.ma1();
a.ma2*/
Impl i=new Impl();
IA a=i;
IB b=i;
IC c=i;
ID d=i;
ClassE e=i;
a.ma1();
a.ma2();
b.mb();
c.mc();
d.mb();
d.mc();
d.md();
e.me();
/*System.out.println(i instanceof IA);
System.out.println(i instanceof IB);
System.out.println(i instanceof IC);
System.out.println(i instanceof ID);
System.out.println(i instanceof ClassE);*/
}
}
abstract class ClassA{
public static final int M=10;
public static final double N=2.78;
public abstract void ma1();
public abstract void ma2();
}
interface IA{
public static final int M=10;
public static final double N=2.78;
public abstract void ma1();
public abstract void ma2();
}
interface IB{
void mb();
}
interface IC{
void mc();
}
interface ID extends IB,IC{
void md();
}
abstract class ClassE{
public abstract void me();
}
class Impl extends ClassE implements IA,ID {
public void ma1(){
}
public void ma2(){
}
public void mb(){}
public void mc(){}
public void md(){}
public void me(){}
}
implements 实现
接口与接口之间可以继承:
类与类之间是单继承。
一个类在继承另外一个类的同时,还可以实现多个接口
子类引用赋值给父类引用,可以直接赋值。
父类引用给子类引用,必须强转。
强转,两边都是接口,或者右边是接口,编译器可以通过
package chp8;
public class TestClassCast{
public static void main(String[] args){
Animal a=new Snoopy();
Dog d=(Dog)a;
Person p=(Person)a;
}
}
class Animal{}
class Dog extends Animal{}
//class Person{}
interface Person{}
class Snoopy extends Dog implements Person{}
作用(面试)
利用接口实现多继承,不会破坏类之间树状关系的简单性。
SUN公司目的接口不主要是多继承
接口所有的方法全是抽象方法
定义了接口,就是定义了标准—-就是弱耦合性
任何弱耦合性,都需要标准的支持
package chp8;
public class TestInterface2{
public static void main(String[] args){
Lamp I=new Lamp();//台灯
YellowLight light=new YellowLight();//灯泡
I.setLight(light);//把台灯安装在台灯上
I.powerOn();//打开台灯
RedLight rl=new RedLight();//买个红灯泡
I.setLight(rl);//把台灯安装在台灯上
I.powerOn();
}
}
interface Light{
void on();
}
class Lamp {
private Light light=null;
public void setLight(Light light){
this.light=light;
}
public void powerOn(){
//light.lightOn();
light.on();
}
}
class YellowLight implements Light{
public void on(){
System.out.println("发出黄光");
}
}
class RedLight implements Light{
public void on(){
System.out.println("发出红光");
}
}