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
    }
  • 相关阅读:
    bootstrap-table 切换页码保留勾选的checkbox
    vsftp服务器同步文件
    MySQL5.7 主从复制配置
    VMware NAT模式下设置网络
    在Jsp中调用静态资源,路径配置问题,jsp获取路径的一些方法
    centos7.3安装配置vsftp
    Linux安装配置Nginx
    jsp登录页面,展示错误信息,刷新页面后错误依然存在解决方案
    linux中使用Jmeter压测总结
    常规测试方法
  • 原文地址:https://www.cnblogs.com/ysloong/p/6389312.html
Copyright © 2011-2022 走看看