1.接口
- 接口比抽象类更抽象,接口只有抽象方法
public interface Usb {
public static final String name ="small";
public abstract void open();
public abstract void close();
}
public static final这是接口中固定修饰符写或者不全写或者不写都是默认存在的,final限定值不可改变以,可用类名直接打点调用(因为接了static)
public abstract同样默认存在而不是default因此实现类中若不写public就会出现子类权限低于父类报错
- 接口类似于抽象类也不能直接new,可以实现类覆写所有方法创建
- 接口类可以多继承,普通类可以多层继承,不出现安全问题是因为就算两个父类有同名方法也需要实现类来重写方法,而普通类有方法体,会出现不知道执行哪个父类方法情况
- 一个类可以继承一个父类多个接口类但需要把所有抽象方法都重写
- 注意继承的多个接口类中有重名方法,但一个有返回值一个没有
之中情况不能区分重写因为参数列表相同
没有解决办法,应该避免
- 看有没有安全隐患须看父类方法有没有方法主体
- 接口和接口之间同样可以继承extends
- 接口可以降低耦合性,满足接口规则,因此需要面向接口编程
- 抽象类是具体对象均有的特性,接口是某一对象的特性
class 缉毒犬 extends犬科 implements缉毒
缉毒犬继承犬科,但是有缉毒的特性
- 优先使用接口,少用抽象类会降低耦合
- 接口可以用作参数
public class Computer implements Usb {
public void open( ) {
System.out.println("电脑开机");
}
public void close( ) {
System.out.println("电脑关机");
}
public void useUsb(Usb usb) {//Usb 是接口类可以用作参数但传进来的都是usb的实现类
usb.open();
usb.close();
}
}
---------------------------------------------------------------
public class text {
public static void main(String[] args) {
Computer computer=new Computer();
System.out.println(a);
computer.open();
computer.close();
computer.useUsb(computer);//computer是接口类USB的实现类
}
}
2.多态
- 多态是研究继承关系
Fu fu=new zi();
fu.成员变量;
成员变量:编译看父,运行看子
成员方法:编译运行全看子
仅在多态中,成员变量在编译阶段如果父类没有就会报错
3.运算符
- instanceof比较引用数据类型,仅对继承关系才能判断
class B extends A ;
class C extends A ;
A a=new B;
A a=new C;
if(a instanceof B)如果a是B类型
在父类转子类并调用子类方乏可避免子类b调用子类c方法
- 多态中转型
自动提升(子像父类)
强制转换(父类转换为子类,上例中B b=(B)a;) - 多态可调用共有成员但不可调用子类特有成员
- alt+shift+f6编辑窗口切换,alt+←→同样可以;alt+shift+f8debug模式切换