zoukankan      html  css  js  c++  java
  • 抽象与接口

    一 抽象类与接口的区别?

    (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();
       }
    }

     

  • 相关阅读:
    迁移-Mongodb时间类数据比较的坑
    Kong在windows10的hyperV CentOS上安装
    C#文件上传编码乱码
    入职9个月感想
    单元测试遇到的Mock重载方法问题
    MongoDB wiredTiger存储引擎下的存储方式LSM和B-Tree比较
    【SQL Server】修改DB逻辑文件名称
    【winform】基于UserControl实现webBrower组件时html页面元素加载及onclick事件监听实现
    SQL server 数据连接池使用情况检测
    【Vue起步-Windows】N01:环境安装
  • 原文地址:https://www.cnblogs.com/focusonoutput/p/13829534.html
Copyright © 2011-2022 走看看