目录抽象类概念格式抽象类的特性接口概念格式特性其他接口comparablecomparator对比表cloneable抽象类和接口的区别抽象类概念不能实例化为具体对象用来抽取子类公共特征的 类表示 “xxx子类是xxx父类/抽象类”其中抽象类中不一定有抽象方法。但 有抽象方法的一定是抽象类。抽象类中可以有普通方法、普通成员变量、构造方法格式public abstract class 类名{public int width;public void sum();public abstract void res();//抽象方法不用给出方法体public 类名{}}抽象类的特性1.继承后要重写抽象类中的抽象方法。否则子类也要为抽象类。2.抽象类不能直接实例化对象3.不能被private和abstract非法修饰符组合static、final修饰因为类内的抽象方法要重写final修饰的类不能被继承抽象类需要子类继承实现冲突private: 外部无法继承该类static不能修饰外部类4.可以有构造方法供子类super调用用于初始化父类的成员变量抽象类的作用增加一层编译器的校验接口概念一种行为标准的规范。表示“xxx具有xxx接口的特性”接口间可以用extend继承类可以实现 多个接口格式public interface 接口名{void method();public abstract static method2();}//其他类//接口必须通过 类 实现public class Testimplements接口名{}特性1.接口中的方法默认都是抽象方法public abstract 修饰方法没有方法体2.接口中的成员默认是 public static final修饰3.接口类型是 引用类型不能实例化接口对象4.实现接口后需要重写 所有 抽象方法5.接口中只能是抽象成员接口没有构造方法6.重写接口方法时不能使用默认的访问权限∵访问权限不能缩小必须写public7.不能有静态代码块和构造方法。Java8 之后接口可以有default默认方法8.若 接口中的方法被default / static修饰那么可以有具体的实现其他的都是抽象方法其他接口comparable该接口重写方法后用于固定的比较当前对象 this 和传入的另一个对象缺点 比较规则 固定 在实体类内部如果要改比较逻辑必须修改实体类源码//实现接口class Test implement ComparableTest//此处的的类型是 需要比较的类型////要重写接口中的compareTo方法返回类型是整型public int compareTo( Test t){return this.name.compareTo(o.name)}//-------------------------------//main主函数//调用方法t1.compareTo(t2)comparator类实现这个接口后需要 重写compare方法public void compare( 类型 比较对象1类型 比较对象2){}//使用的比较对象是 实现接口的对象格式Arrays.sort(比较数组 实现comparator的类对象)compare(o1,o2)两个参数是传入的两个对象互相比较没有 this 参与好处如果想要修改比较规则只需要更换 实现不同方法的 对象即可不用修改方法本身对比表cloneable1.使用clone方法在通过自定义类使用该方法时为什么找不到这个方法。但是clone方法是 Object类中的方法Object类是所有类的默认父类。按照继承父类后子类可以直接使用父类中的方法。图中观察可得clone方法是被protected修饰该方法只能在同一个包或不同包的子类中使用那为什么不能使用呢ans:2.重写clone方法、强制类型转换抛出异常 这些问题解决后运行出现 CloneNotSupportedException的原因是什么 ans:子类需要实现Cloneable接口。Cloneable是标记接口没有任何方法仅仅作为标记告知虚拟机允许该对象调用 Object 的 clone () 做拷贝。抽象类和接口的区别抽象类接口变量可以有普通成员变量只能是public static final 常量没 普通成员变量方法抽象方法、静态方法、构造方法抽象方法default默认方法没构造方法继承每个类只能有一个直接父类单继承能实现多继承语义xx is 抽象类xx has 接口的属性