zoukankan      html  css  js  c++  java
  • java 接口和抽象类的区别

    接口和抽象类的区别:
    A:成员区别
            抽象类:
                       成员变量:可以变量/也可以常量
                       构造方法:有
                       成员方法:可以抽象也可以非抽象(有方法体)
            接  口:
                       成员变量:只能是常量,并且是静态的/默认修饰符:public final static/建议手动给出
                       成员方法:只可以抽象(不能有实现方法,只有方法声明(即没有方法体))
    B:关系区别
            类与抽象类:继承,单继承
            类与  接口 :实现,单实现,多实现
            接口与接口:继承,单继承,多继承
    
    C:设计理念区别
               抽象类:is a  (对根源的抽象,比如:人是动物(抽象类))
               接口   :like a(对动作/行为的抽象,所以,可以实现多个接口,但只能继承一个父类)
                  
    另外:接口定义的方法需要全部被实现,抽象类不是

    详解:
    1,java中一个没有抽象体的方法,定义为抽象方法(抽象方法不能有方法体)
         public abstract void method1(){} //错误
    2,抽象类中不一定有抽象方法 ,但是类中如果有抽象方法,该类必须定义为抽象类
    3,抽象类不能实例化,应为他不是具体的
    4,但是,抽象类其实是可以被实例化的,只是通过其子类被实例化
    5, 抽象类里的
         抽象方法:强制要求子类做的事情
         非抽象方法:子类继承的事情,提高代码复用性

    举例
    abstract class Animal{
        public abstract void eat();
    }
    class Cat extends Animal{
        public void eat(){
            System.out.println("猫吃鱼");
        }
    }
    class AbstractDemo{
        public static void main(String[] args){
            // 通过多态的方式实例化抽象类
            Animal a = new cat();
            a.eat();
        }
    }
    6,一个类如果没有抽象方法,可不可以定义为抽象类?意义?
         可以,不让创建对象,通过子类来访问
    7,abstract和哪些关键字不能共存?
         private、final :冲突
         static:无意义
    abstract aa {
         static abstract void method();     //aa.method();因为没有方法体,所以没有意义(静态方法可以通过类名调用)
         public static void method1(){...}  //OK
    }
  • 相关阅读:
    avalon做的抽奖效果
    [转]谈谈前端渲染 VS 后端渲染
    迷你MVVM框架 avalonjs 1.3.7发布
    迷你MVVM框架 avalonjs 学习教程22、avalon性能大揭密
    Facebook React 和 Web Components(Polymer)对比优势和劣势
    迷你MVVM框架 avalonjs 学习教程21、双向绑定链
    迷你MVVM框架 avalonjs 学习教程20、路由系统
    html中的数据岛:利用DSO和javascript在html中动态加载和浏览xml数据
    使用JS的 FileReader 读取本地文本文件(可兼容各种浏览器)
    简易版jquery
  • 原文地址:https://www.cnblogs.com/ysloong/p/6389312.html
Copyright © 2011-2022 走看看