抽象类和接口

抽象类:被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关系

原文地址:https://www.cnblogs.com/yelena-niu/p/9056917.html