抽象类:被abstract关键字修饰的类
抽象方法:只抽取方法声明,不抽取方法主体,此方法就是一个抽象方法
抽象类定义:public abstract class{ }
抽象方法定义:public abstract 返回值类型 方法名(参数);
package com.oracle.Demo01; //抽象类 //抽象方法没有方法体 有参数列表 有返回值类型 public abstract class Developer { public abstract void work(); public void eat(){ System.out.println("吃馒头"); } }
package com.oracle.Demo01; public class JavaEEemp extends Developer { public void work(){ System.out.println("用Java语言编程"); } }
package com.oracle.Demo01; public class Test { public static void main(String[] args) { JavaEEemp javaee = new JavaEEemp(); javaee.work(); } }
接口的定义:功能的集合,接口只描述所应该具备的方法,并没有具体实现
接口的定义格式:
public interface 接口名{
public abstract 返回值类型 方法名(参数);
}
package com.oracle.Demo01; //修饰符 public protected private default //在接口中,如果抽象方法前面没有写权限,默认是public权限 //在接口中,方法前面默认的写法:public //在接口中,定义成员变量,只能定义常量 //static,可以直接被类名调用,格式 类名.成员 //final,最终的,不可以被修改,用final修饰常量 //在接口中,定义成员变量默认写法:public static final public interface USB { public static final int a = 8; public abstract void usbinter(); }
package com.oracle.Demo01; public class USBImp implements USB { public void usbinter(){ System.out.println("usb鼠标连接"); } }
继承的同时实现接口
package com.oracle.Demo02; public abstract class NoteBook { public abstract void game(); public abstract void music(); }
package com.oracle.Demo02; public interface USB { public abstract void usbinter(); }
package com.oracle.Demo02; public class ThinkPadE570 extends NoteBook implements USB { @Override public void usbinter() { // TODO Auto-generated method stub System.out.println("有三个USB接口"); } @Override public void game() { // TODO Auto-generated method stub System.out.println("从百度下载"); } @Override public void music() { // TODO Auto-generated method stub System.out.println("随心听"); } }
接口的多继承
package com.oracle.Demo03; public interface Fu1 { public abstract void show(); }
package com.oracle.Demo03; public interface Fu2 { public abstract void show1(); }
package com.oracle.Demo03; public interface Fu3 { public abstract void show2(); }
package com.oracle.Demo03; public interface Zi extends Fu1,Fu2,Fu3 { public abstract void show3(); }
接口和抽象类的区别
l 都位于继承的顶端,用于被其他类实现或继承;
l 都不能直接实例化对象;
l 都包含抽象方法,其子类都必须覆写这些抽象方法;
l 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
l 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
l 抽象类是这个事物中应该具备的内容, 继承体系是一种 is..a关系
l 接口是这个事物中的额外内容,继承体系是一种 like..a关系