精华内容
下载资源
问答
  • 抽象类和接口,抽象类和接口的区别

    千次阅读 多人点赞 2016-11-21 17:28:05
    其实愿意去真正了解抽象类和接口是因为看源代码后的动力。因为接口用的太多了,对于java开发来说,现在只是一个小学 生。 看了很多大牛的文章还有自己老师的总结,然后自己总结了一些。有不对的请指出,因为是个...

               

    其实愿意去真正了解抽象类和接口是因为看源代码后的动力。因为接口用的太多了,对于java开发来说,现在只是一个小学 生。

    看了很多大牛的文章还有自己老师的总结,然后自己总结了一些。有不对的请指出,因为是个小学生,希望能有大牛解惑和 互动。

    红色字体是概念。括号中的文字都是我的想法,就是抽象类和接口的应用性,如何应用!


              抽象类:abstract
                    抽象类可以有抽象方法也可以有普通方法。
                    但是有抽象方法的类必须是抽象类。
                    继承抽象类,必须实现抽象类中所用的抽象方法,不然把该类也变成抽象类。

                    (抽象类是从下而上的,因为必须先知道有狗,猫这两个类,才会创建一个抽象类,让他们继承。抽象类是实现行为)
                    
              接口: interface
                    所用的方法都是抽象方法。
                    变量都是静态常量。

                    (接口是从上而下的,因为当时创建接口的时候你并不需要知道谁使用。就好像有一个飞的接口,不止小鸟类能实现,飞机 也能实现。接口是定义行为)
                    
             接口和抽象类的区别:
                   抽象类是单继承的,是一个类。
                   接口可以多现实,接口也继承多个接口。是一个接口
                   接口是一个特殊的抽象类。

                   (抽象类是单继承,既然是个类,面向对象的概念就是一个模板,所以没有更好的延伸性。
                    假如有一个门的抽象类,那门肯定是拥有开门和关门的方法。
                    如果这个门需要一个指纹系统开门呢,开门需要一个报警系统呢,还有自动门。门肯定就是门,只需要实例的时候确实是 个门就可以了。
                    那这个时候就可以实现接口,因为接口不需要这种完全依赖关系,只要能用就可以实现
                    自动门实现红外线自动识别功能的接口、需要指纹识别的门也只需要实现指纹识别的这个接口。
                    只要你能想得到,是可以实现多个接口。
                    抽象类是要实现的行为,因为必然会有子类要继承,实现抽象方法,所以肯定是先知道子类,才会创建抽象类,所以是从 下而上
                    接口是定义行为,接口定义的行为是因为以后会出现很多个类要拥有这个功能才创建的,所以是从上而下)
    展开全文
  • 抽象类和接口的区别以及抽象类和接口的使用场景

    千次阅读 多人点赞 2019-05-30 18:15:44
    一、抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。 1.抽象方法...

    一、抽象类

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。

    1.抽象方法:使用abstract修饰且没有方法体的方法。

    特点:

    ① 抽象方法没有方法体,交给子类实现

    ② 抽象方法修饰符不能是private final static

    ③ 抽象方法必须定义在抽象类或者接口中

    2.抽象类:包含抽象方法的类,即使用abstract修饰的类。

    特点:

    ① 抽象类不能被实例化,只能被继承

    ② 抽象类中可以不包含抽象方法(不包含抽象方法就没有太大意义,可以作为工具类防止被实例化)

    ③ 抽象类的子类可以不实现该类所有的抽象方法,但也必须作为抽象类(抽象派生类)

    ④ 抽象类的构造方法不能定义成私有(子类构造方法会调用父类构造方法)

    ⑤ 抽象类不能使用final修饰,final修饰的类不能被继承

    实例:武器作为一个抽象类具备攻击行为(attack方法),具体如何攻击(how2Attack方法)需要子类实现。如:机关枪可以射击敌人,手榴弹可以丢向敌人。

    public class Test3 {
        public static void main(String[] args) {
            Gun gun = new Gun("机关枪");
            Grenade grenade = new Grenade("手榴弹");
            gun.attack();
            grenade.attack();
            gun.how2Attack();
            grenade.how2Attack();
        }
    }
    
    abstract class Weapon{
        String name;
        public void attack(){
            System.out.println(name+"具有攻击行为");
        }
    
        abstract void how2Attack();
    
    }
    class Gun extends Weapon{
        public Gun(String name) {
            this.name = name;
        }
    
        @Override
        void how2Attack() {
            System.out.println(name+"射击敌人");
        }
    }
    class Grenade extends Weapon{
        public Grenade(String name){
            this.name = name;
        }
        @Override
        void how2Attack() {
            System.out.println(name+"丢向敌人");
        }
    }

    二、接口

    1.什么是接口

    ① 硬件接口:是指同一计算机不同功能层之间的通信规则称为接口。

    ② 软件接口:是指对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。

    2.Java中的接口:在JAVA编程语言中是接口一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

    特点:

    ① 接口中没有构造器,不能被实例化

    ② 接口只能继承接口,不能继承类,接口支持多继承

    ③ 接口中的定义的成员变量,默认是public static final修饰的静态常量

    ④ 接口中定义的方法,默认是public abstract修饰的抽象方法

    ⑤ 接口中定义的内部类,默认是public static修饰的静态内部类

    标志接口:仅仅作为一个定义,就是一个标志

    常量接口:用来封装多个常量信息

    注意在JDK8中,接口也可以定义静态方法和默认非静态方法,可以直接用接口名调用静态方法,实现类可以调用默认非静态方法。如果同时实现两个接口,接口中定义了一样的默认方法,则实现类必须重写默认方法,不然会报错

    实例:走路和游泳作为两个抽象的行为,青蛙可以实现两个行为接口来具体实现行为的内容

    public class Test4 {
        public static void main(String[] args) {
            Frog frog = new Frog("青蛙");
            frog.getName();
            frog.work();
            frog.swim();
        }
    }
    class Animal {
        String name;
    
        public String getName() {
            System.out.println("Animal:"+name);
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    interface IWalk{
        void work();
    }
    interface ISwim{
        void swim();
    }
    class Frog extends Animal implements IWalk,ISwim{
    
        public Frog(String name) {
            this.name = name;
        }
    
        @Override
        public void work() {
            System.out.println(this.name+":蹦蹦跳跳地走路");
        }
    
        @Override
        public void swim() {
            System.out.println(this.name+":在水里蛙泳");
        }
    }

    三、抽象类和接口的异同点

    1.语法层面

    相同点:

    ① 抽象类和接口都不能被实例化

    ② 抽象类和接口都可以定义抽象方法,子类/实现类必须覆写这些抽象方法

    不同点:

    ① 抽象类有构造方法,接口没有构造方法

    ② 抽象类可以包含普通方法,接口中只能是public abstract修饰抽象方法(Java8之后可以)

    ③ 抽象类只能单继承,接口可以多继承

    ④ 抽象类可以定义各种类型的成员变量,接口中只能是public static final修饰的静态常量

    2.设计层面

    抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

    设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

     

    四、抽象类和接口的使用场景

    1.抽象类的使用场景

    既想约束子类具有共同的行为(但不再乎其如何实现),又想拥有缺省的方法,又能拥有实例变量

    如:模板方法设计模式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。

    2.接口的应用场景

    ① 约束多个实现类具有统一的行为,但是不在乎每个实现类如何具体实现

    ② 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

    ③ 实现类需要具备很多不同的功能,但各个功能之间可能没有任何联系。

    ④ 使用接口的引用调用具体实现类中实现的方法(多态)

    个人见解,若有错误请指出,谢谢!

     

    参考资料:https://www.cnblogs.com/dolphin0520/p/3811437.html

    展开全文
  • Java抽象类和接口和继承之间关系 Java抽象类和接口和继承之间关系
  • 抽象类和接口的区别

    万次阅读 多人点赞 2018-11-21 19:55:11
    抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽象类,但可实现多个接口等等。 如何区分 类是对对象的抽象,抽象类是对类的抽象; 接口是对行为的抽象。 若行为跨越不同...

    比较

    从定义上看

    抽象类是包含抽象方法的类;
    接口是抽象方法和全局变量的集合。

    从组成上看

    抽象类由构造方法、抽象方法、普通方法、常量和变量构成;
    接口由常量、抽象方法构成,在 JDK 1.8 以后,接口里可以有静态方法和方法体。

    从使用上看

    子类继承抽象类(extends);
    子类实现接口(implements)。

    从关系上看

    抽象类可以实现多个接口;
    接口不能继承抽象类,但是允许继承多个接口。

    从局限上看

    抽象类有单继承的局限;
    接口没有单继承的限制。

    区分

    1. 类是对对象的抽象,抽象类是对类的抽象;

      接口是对行为(方法)的抽象。

    2. 若行为(方法)跨越不同类的对象,可使用接口;

      对于一些相似的类对象,用继承抽象类。

    3. 抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类;

      接口是根本不知子类的存在,方法如何实现还不确认,预先定义。

    思考

    Q:Java 中没有多继承,用了接口以后,解决了此问题。如果以后 Java 可以多继承了,接口还有意义吗?

    A:继承是描述父子关系的,而接口是用来标识该类的对象有某种属性的。比如:苹果和鸡都可以吃,但是苹果是水果类,猫是动物类,这个时候为了让苹果和鸡都可以吃的话,可以实现 eatable 接口。所以说,接口比类带来更多的灵活性。

    推荐阅读:Java 中的接口有什么作用?

    同类博客

    面向对象基础

    抽象类与接口的异同

    抽象类与抽象方法

    展开全文
  • 抽象类和接口

    2012-10-20 17:11:02
    java抽象类接口之间的关系
  • 抽象类和接口关系对比

    千次阅读 2007-04-06 11:42:00
    抽象类抽象类主要用来定义一些抽象的属性方法,留待子类根据自己...如果需要实现多个类的抽象方法,必须使用接口子类与抽象类是is关系接口接口主要用来定义一些抽象的属性方法,留待实现类根据自己的情况实现这些属

    抽象类
    抽象类主要用来定义一些抽象的属性和方法,留待子类根据自己的情况实现这些属性和方法
    抽象类不能生成实例,即不能new一个抽象类的实例
    抽象类可以被继承,除非继承该抽象类的子类仍声明为抽象的,否则就必须实现这个抽象类的所有抽象属性和方法
    一个类只能继承一个抽象类,如果需要实现多个类的抽象方法,必须使用接口
    子类与抽象类是is关系
    接口
    接口主要用来定义一些抽象的属性和方法,留待实现类根据自己的情况实现这些属性和方法
    接口不能生成实力,即不能new一个接口的实例
    抽象类可以被实现,除非实现该接口的类声明为抽象的,否则就必须实现这个接口的所有抽象属性和方法
    一个类可以实现多个接口
    实现类与接口是has关系 

    说明:这里面有些地方可能需要改动,具体请参见本人的另一篇文章《接口(interface)原来是可以被继承(extends)的》

    展开全文
  • 抽象类和接口区别

    万次阅读 多人点赞 2019-05-07 23:29:58
    抽象类和接口的定义: 抽象类(abstract class): 使用abstract修饰符修饰的类。(如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。) 实际点来说,一个抽象类不能实例化,因为“没有...
  • 抽象类和接口的区别及使用场景

    千次阅读 多人点赞 2018-07-09 10:22:53
    抽象类和接口的区别及使用场景 1.1 抽象类 1.2 接口 1.3 抽象类和接口的区别 1.3.1 语法层面上的区别 1.3.2 设计层面上的区别 1.4 什么时候使用抽象类和接口 抽象类和接口的区别及使用场景 1.1 抽象类 在...
  • C#抽象类和接口

    2016-11-10 16:32:46
    接口: 所有成员默认为public,因此接口中不能有private修饰符。 派生类必须实现接口的所有成员 ...一个类可以直接实现多个接口接口之间用逗号隔开 ...一个接口可以有多个父接口,...从抽象类派生的非抽象类必须包括
  • Java基础——抽象类和接口关系

    千次阅读 2015-02-22 23:09:36
    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都能用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就应该被定义为抽象类抽象类 概述  比如,...
  • Java 抽象类和接口

    千次阅读 2018-12-04 21:45:27
    抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法构造方法的访问方式普通类一样。 由于抽象类不能实例化对象,但可以定义一个引用。抽象类必须被继承,才能被使用。 父类包含了子类...
  • 首先抽象类归根结底还是属于类,对于抽象方法,是只能存在于抽象类中的,我们无法再一个非抽象的类中声明一个抽象方法,其次抽象方法只需要声明,并不需要事先。当我们要写一个抽象类的时候只需要在类的前面声明为...
  • Java中抽象类和接口的区别

    万次阅读 多人点赞 2019-02-07 14:10:07
    在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口...
  • 抽象类接口之间的继承实现关系  对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的...
  • 抽象类和接口有什么异同

    千次阅读 2017-09-07 18:41:36
    接口和抽象类的相同点: 1.都不能被实例化 2.接口的实现类或者抽象类的子类都只有实现了接口或者抽象类中的方法后才能被实例化。 接口和抽象类的不同点: 1.接口只有定义,其方法不能在接口中实现,只有实现...
  • Kotlin-抽象类和接口

    千次阅读 2016-10-19 16:48:39
    在Kotlin中可以通过抽象类和接口来完成抽象。抽象类和接口有很多相似之处,又有不同之处。抽象方法抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:abstract fun doSwim()抽象方法...
  • 抽象类和接口的比较

    2014-03-15 13:55:45
    抽象类接口关系 序号 区别点 抽象类 接口 1 定义 包含一个抽象方法的类 抽象方法全局常量的集合 2 组成 构造方法,抽象方法,普通方法,变量,常量 常量,抽象方法 3 使用 继承/extends 实现/implements ...
  • 抽象类和接口有什么异同?

    千次阅读 2018-12-23 14:48:42
    相同点: 1.都不能被实例化 2.接口的实现类或者抽象的子类都必须实现类接口或者继承了抽象才可以被实例化 不同点: ...3.接口强调设计理念“has-a”的关系抽象类强调“is-a”关系 4.接口中定义变量...
  • java抽象类和普通类的区别 1.抽象类不能被实例化。 2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。...抽象类和接口的区别 Abstract Class ...
  • 实用抽象类和接口的区别

    千次阅读 2016-09-29 20:39:26
    抽象类和接口又什么好处从这个问题我们可以衍生出两个问题:1.为什么要用抽象类?2. 为什么要使用接口?企业单位在面试的时候经常会问到!答案综合考虑以下方面:1:强调不但应该具有什么能力,而且应该具有什么特性...
  • 继承抽象类和接口的区别

    千次阅读 2018-07-17 17:32:18
     抽象类和接口都是在一定程度上体现到了java的多态特性。那么在使用场景上,它们有什么区别呢? 在语法方面:   抽象类:  1.由abstract关键词修饰的类称之为抽象类。   2.抽象类中没有实现的方法称之为...
  • Java笔试面试-抽象类接口

    万次阅读 多人点赞 2019-09-15 22:29:50
    抽象类 定义:   在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说,使用...
  • 【JAVA】抽象类和接口的联系与区别

    万次阅读 2018-08-15 20:35:32
    抽象类和接口的联系与区别 抽象类接口一直是面试中问到的一道比较基础的问题,弄懂它们之间的联系与区别,将会提升我们面向对象编程的功底。 联系 (1)抽象类和接口都不能被实例化。如果要实例化,则抽象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 374,320
精华内容 149,728
关键字:

抽象类和接口的关系