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

    千次阅读 多人点赞 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

    展开全文
  • 抽象类和抽象方法、接口抽象类和抽象方法、接口抽象类和抽象方法、接口
  • 抽象类和接口的区别

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

    比较

    从定义上看

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

    从组成上看

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

    从使用上看

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

    从关系上看

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

    从局限上看

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

    区分

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

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

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

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

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

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

    思考

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

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

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

    同类博客

    面向对象基础

    抽象类与接口的异同

    抽象类与抽象方法

    展开全文
  • 在面试中我们经常被问到:Java中抽象类和接口的区别是什么?  然后,我们大说一通抽象类可以有方法,接口不能有实际的方法啦;一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,好像把标准答案...
  • 抽象类并不能继承接口,但可以实现接口抽象类可以继承具体类,前提是具体类必须具有构造函数且具有访问权限。这里需要说明,当一个具体类没有写构造函数时,系统会自动生成默认的无参构造器,意味着没有写构造...

    接口可以继承接口。

    抽象类并不能继承接口,但可以实现接口。

    抽象类可以继承具体类,前提是具体类必须具有构造函数且具有访问权限。这里需要说明,当一个具体类没有写构造函数时,系统会自动生成默认的无参构造器,意味着没有写构造函数的具体类也可以被抽象类继承。但是,一旦将具体类的无参构造器设置访问修饰符为 private 时,抽象类则不可以继承。

    抽象类可以有静态的 main 方法。抽象类在面向对象中是被用来描述现实中的抽象事物, 抽象类没有对象概念所以不能被实例化. 但可以定义属性和方法, 其中属性方法都可以是静态的. 静态的意义其实就是在栈内存中只有一个, 所以该成员也会先于对象出现在内存中, 所以静态并没有违反抽象的原则. 抽象类中可以定义静态成员.

    interface IA{}
    interface IB{}
    interface I extends IA,IB{}//接口可以继承多个接口
    abstract class E implements IA{} //抽象类可以实现接口,但不可以继承接口
    abstract class F extends C{}//抽象类可以继承具体类
    class D{private D(){}}
    //abstract class G extends D{}//Implicit super constructor D() is not visible for default constructor. Must define an explicit constructor抽象类不可以继承无权限构造器的具体类
    abstract class H{public static void main() {}}//抽象类可以有静态的main方法
    
    展开全文
  • JAVA抽象类和接口

    千次阅读 2021-06-14 21:08:49
    抽象方法,只声明而未实现的方法我们称为抽象方法,所有的抽象方法都需要用abstract关键字声明,包含抽象方法的类也需要使用abstract关键字声明,抽象类和普通类相比,区别在于抽象类带有抽象方法,抽象方法可以只...
  • 很多C#的初学者在编程时都容易把抽象类和接口搞混,本文就为大家从概念上讲解抽象类和接口的区别: 一、抽象类: 含有abstract修饰符的class即为抽象类抽象类是特殊的类,只是不能被实例化,可以创建一个变量,其...
  • 抽象类和接口

    千次阅读 2020-10-01 13:21:40
    抽象类抽象类接口 抽象类 抽象类的定义:修饰符可以用来修饰方法,也可以修饰类。如果修饰方法,那么就是抽象方法,如果修饰类,那么就是抽象类 抽象类中可以没有抽象方法(即可以有普通方法),但是有抽象方法的...
  • 接口抽象类和实现类

    千次阅读 2019-04-13 10:49:25
    接口抽象类和实现类 1. 接口是最抽象的一层,不需要进行任何实现;抽象层可以实现部分接口方法,也可以自定义方法;实现类必须实现所有方法。 2. 接口能被类(抽象类和具体类)实现,区别在于抽象类实现接口,...
  • 抽象类和接口区别

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

    万次阅读 多人点赞 2018-08-12 21:38:36
    接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。...
  • Java 抽象类和接口

    千次阅读 2018-12-04 21:45:27
    抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法构造方法的访问方式普通类一样。 由于抽象类不能实例化对象,但可以定义一个引用。抽象类必须被继承,才能被使用。 父类包含了子类...
  • C#抽象类和接口

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

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

    万次阅读 多人点赞 2019-02-07 14:10:07
    在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口...
  • php抽象类和接口的区别

    万次阅读 2018-04-04 12:49:04
    php抽象类和接口的区别 tags:抽象类 接口 抽象类和接口 php 引言:这是一个面试经常被问到的问题,也是一个经典问题。我们尽量引用官方权威的说明或者经过实验来证明本文所说的内容准确性。 抽象类 ...
  • 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法构造方法的访问方式普通类一样。 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段...
  •  二、接口接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员...
  • 深入理解java的抽象类和接口,为以后设计接口和类做好铺垫!
  • 接口和抽象类有什么区别?

    千次阅读 2019-04-19 14:06:15
    接口和抽象类有什么区别? 抽象类可以有构造方法;接口中不能有构造方法。 抽象类中可以有普通成员变量;接口中没有普通成员变量。 抽象类中可以包含非抽象普通方法;接口中的所有方法必须都是抽象的。 抽象类...
  • 抽象类和接口有什么区别

    千次阅读 2020-08-10 16:14:50
    抽象类和接口有什么区别 最本质的区别,抽象类是一个类,而接口是另一种类型 接口用来对功能进行抽象,而抽象类用来对类型结构进行抽象 抽象类中可以有正常方法(对方法进行实现)也可以有抽象方法(只做声明),而在接口...
  • 抽象类和接口的异同

    千次阅读 2017-11-10 19:57:47
    抽象类和接口的相同点: 1.代表系统的抽象层,都不能实例化,都能包含抽象方法(用于描述系统提供的服务,不必提供具体实现) 2.都可以指向子类(实现类)对象 不同点: 1.构造方法:抽象类可以有构造方法,接口中不能有...
  • 抽象类和接口有什么异同

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 788,100
精华内容 315,240
关键字:

抽象类和抽象接口