抽象与接口

一 抽象类与接口的区别?

(1)个类只能继承一个抽象类,一个类可以实现多个接口。

(2)抽象类中可以存在非抽象方法,接口中的方法都是抽象方法。

(3)抽象类可以有私有的成员变量和成员方法,接口中的方法全部默认的修饰为public abstract 类型的方法。

(4)实现抽象类的方法时,如果方法是抽象的,子类必须重写抽象方法,如果方法不是抽象的,子类可以选择继承;实现了接口就必须重写接口中的所有方法。

一 抽象类总结

1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

2. 抽象类中不一定包含抽象方法,但是包含抽象方法的类必定是抽象类。

3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

三 接口:接口是抽象方法的集合

  • 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract。
  • 接口不能包含成员变量,除了 static 和 final 变量。
    • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法都是公有的。4
/* 文件名 : NameOfInterface.java */
import java.lang.*;
//引入包
 
public interface NameOfInterface
{
   //任何类型,必须是 final, static 字段
   //抽象方法(不需要加上abstract)
}

四 接口之间的继承

// 文件名: Sports.java
public interface Sports
{
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}
 
// 文件名: Football.java
public interface Football extends Sports
{
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}
 
// 文件名: Hockey.java
public interface Hockey extends Sports
{
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

类不能多继承,但是接口之间可以多继承

public interface Hockey extends Sports, Event

一个接口继承两个接口

五 接口的实现

/* 文件名 : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{
 
   public void eat(){
      System.out.println("Mammal eats");
   }
 
   public void travel(){
      System.out.println("Mammal travels");
   } 
 
   public int noOfLegs(){
      return 0;
   }
 
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

 

原文地址:https://www.cnblogs.com/focusonoutput/p/13829534.html