精华内容
下载资源
问答
  • 接口、抽象类和实现类

    千次阅读 2019-04-13 10:49:25
    2. 接口能被类(抽象类具体类)实现,区别在于抽象类实现接口,可以实现该接口的方法,也可以不实现该接口的方法;具体类必须实现接口的所有方法 3. 接口可以被接口继承,但不允许被类继承 4. 类之间可以相互继承...

    接口、抽象类和实现类

    1. 接口是最抽象的一层,不需要进行任何实现;抽象层可以实现部分接口方法,也可以自定义方法;实现类必须实现所有方法。
    2. 接口能被类(抽象类和具体类)实现,区别在于抽象类实现接口,可以实现该接口的方法,也可以不实现该接口的方法;具体类必须实现接口的所有方法
    3. 接口可以被接口继承,但不允许被类继承
    4. 类之间可以相互继承,而且只能单继承
    5. abstract是抽象的意思,在java中,规定只能修饰类或者方法,所以不能修饰属性。被abstract修饰的内容都是暂未被实现的,比如类、方法。属性之所以不能被abstract修饰,是因为属性不存在"尚未被实现"的状态。比如你可能会联想到int age; 或是String name; 但可惜的是,在申明变量时,int会默认给age赋予初始值0,String会默认给name赋予初始值""。因此属性达不到"尚未被实现的状态",从而不能被abstract修饰。
    6. 抽象类和普通类在于:抽象类不能进行实例化,一方面抽象方法类似于接口的方法;另一方面,非抽象方法又和普通类方法相同,所以它兼备接口和普通类两种特型。
    7. 由于抽象类不能实例化,因此一般是作为父类,由子类进行扩充和实例化,因此,在抽象类的所有protected级别以上的方法或变量,均可以在子类中调用。

    1. 新建2个接口Context和Invocation
      Context
    package com.whc.abs;
    
    /**
     * 接口是最抽象的一层,只定义需要实现的接口函数及功能
     *
     * @author Administrator
     * @date 2019/4/11
     */
    public interface Context {
    
        // 接口中定义的成员变量默认为static
        String name = "admin";
        int age = 18;
        
        Object getName();
        Object getAge();
        void set();
    }
    
    

    另一个接口Invocation

    package com.whc.abs;
    
    /**
     * @author Administrator
     * @date 2019/4/11
     */
    public interface Invocation {
        Object getSrc();
        Object getTar();
        Object getCreateTime();
        Object getCreator();
    }
    
    

    新建一个抽象类AbstractContext

    package com.whc.abs;
    
    import java.util.Date;
    
    /**
     * 抽象类实现接口,可以有抽象方法也可以具体实现
     *
     * @author Administrator
     * @date 2019/4/11
     */
    public abstract class AbstractContext implements Context, Invocation {
    
       /**
         * 覆盖接口类的属性name
         */
        public String name = "admin1";
    
        /**
         * 抽象类可以写新定义的方法
         *
         * @return
         */
        protected String getAccount(){
            return "100";
        }
    
        /**
         * 可以在抽象类实现接口的方法
         *
         * @return
         */
        @Override
        public Object getName(){
            return "admin";
        }
    
        /**
         * 抽象类中可以定义类似接口函数,但必须加上abstract字段
         *
         * @return
         */
        abstract Object getEmail();
    
        /**
         * 抽象类实现接口的方法
         *
         * @return
         */
        @Override
        public Object getCreateTime() {
            return new Date();
        }
    
        /**
         * 抽象类实现接口的方法
         *
         * @return
         */
        @Override
        public Object getCreator() {
            return "administrator";
        }
    }
    
    

    抽象类实现类AbstractContextImpl

    package com.whc.abs;
    
    /**
     * @author Administrator
     * @date 2019/4/11
     */
    public class AbstractContextImpl extends AbstractContext {
    
        /**
         * 可以在实现类中覆盖抽象类已有的方法
         *
         * @return
         */
        @Override
        public Object getName() {
            return "guest";
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        public Object getAge() {
            return "25";
        }
    
        /**
         * 接口中的方法需要实现
         */
        @Override
        public void set() {
    
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        Object getEmail() {
            return null;
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        public Object getSrc() {
            return null;
        }
    
        /**
         * 接口中的方法需要实现
         *
         * @return
         */
        @Override
        public Object getTar() {
            return null;
        }
    
        public static void main(String[] args) {
            AbstractContext context = new AbstractContextImpl();
            System.out.println(context.name);//访问的是AbstractContext的name成员,它覆盖了接口类的静态成员name
            System.out.println(context.age);//访问的是接口定义静态变量age
            System.out.println(context.getAccount());//访问的是抽象类自定义实现的方法
            System.out.println(context.getName());//访问的是本实现类的方法,因为实现类对抽象类的方法进行了覆盖
            System.out.println(context.getAge());//访问的是本实现类的方法,实现了Context接口的方法
        }
    
    }
    
    

    输出结果:

    admin1
    18
    100
    guest
    25
    

    github地址:

    https://github.com/wuhc2006/springboot-practice/tree/master/springboot-thread/src/main/java/com/whc/abs

    展开全文
  • 抽象类实现问题

    千次阅读 2018-12-14 09:05:22
    注意,抽象类和普通类的主要有三点区别: 1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。 2)抽象类不能用来创建对象; 3)如果一...

    抽象类的实现问题

    包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

    1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

    2)抽象类不能用来创建对象;

    3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

    在其他方面,抽象类和普通的类并没有区别。

    例如:
    abstract class Animal{
    abstract void say();
    }
    public class Cat extends Animal{
    public Cat(){
    System.out.printf(“I am a cat”);
    }
    public static void main(String[] args) {
    Cat cat=new Cat();
    }
    }
    Animal编译通过,cat编译失败

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

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

    比较

    从定义上看

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

    从组成上看

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

    从使用上看

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

    从关系上看

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

    从局限上看

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

    区分

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

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

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

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

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

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

    思考

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

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

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

    同类博客

    面向对象基础

    抽象类与接口的异同

    抽象类与抽象方法

    展开全文
  • 主要介绍了Kotlin 匿名类实现接口和抽象类区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 抽象类并不能继承接口,但可以实现接口。 抽象类可以继承具体类,前提是具体类必须具有构造函数且具有访问权限。这里需要说明,当一个具体类没有写构造函数时,系统会自动生成默认的无参构造器,意味着没有写构造...

    接口可以继承接口。

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

    抽象类可以继承具体类,前提是具体类必须具有构造函数且具有访问权限。这里需要说明,当一个具体类没有写构造函数时,系统会自动生成默认的无参构造器,意味着没有写构造函数的具体类也可以被抽象类继承。但是,一旦将具体类的无参构造器设置访问修饰符为 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方法
    
    展开全文
  • 抽象类和接口的区别以及抽象类和接口的使用场景

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

    万次阅读 多人点赞 2019-04-18 14:23:50
    普通类和抽象类有哪些区别抽象类不能被实例化 抽象类可以有抽象方法,抽象方法只需申明,无需实现 含有抽象方法的类必须申明为抽象类 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类 ...
  • 抽象类和接口,抽象类和接口的区别

    千次阅读 多人点赞 2016-11-21 17:28:05
    其实愿意去真正了解抽象类和接口是因为看源代码后的动力。因为接口用的太多了,对于java开发来说,现在只是一个小学 生。 看了很多大牛的文章还有自己老师的总结,然后自己总结了一些。有不对的请指出,因为是个...
  • 抽象类和接口的区别  抽象类里面可以有非抽象的方法,接口里只能有抽象方法。  抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号。    抽象类(abstract class):  a.抽象...
  • 1、抽象类  含有abstract修饰符的class即为抽象类,abstract 类不能创建实例对象。在书写抽象类有要注意: ...如果其中不含有抽象方法,那么完全可以将它用一个具体的实现类来替换。   2、抽象类中定义抽象方法
  • java抽象类和普通类的区别 1.抽象类不能被实例化。 2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。 3.抽象方法只需申明,而无需实现抽象类中可以允许普通方法有主体...
  • 先继承抽象类实现接口 class C extends B implements A interface A{ public abstract void say(); } abstract class B{ public abstract void fun(); } class C extends B implements A{ public void say() ...
  • 抽象类实现多态

    千次阅读 2016-05-26 21:21:24
    实现多态的第二种方法也就是实用抽象类(Abstract),那么虚方法可以实现多态,抽象类也可以实现多态,那么到底什么时候使用抽象类呢当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象...
  • 很多C#的初学者在编程时都容易把抽象类和接口搞混,本文就为大家从概念上讲解抽象类和接口的区别: 一、抽象类: 含有abstract修饰符的class即为抽象类抽象类是特殊的类,只是不能被实例化,可以创建一个变量,其...
  • 抽象类和接口区别

    千次阅读 2018-09-28 17:54:30
    抽象类: 一个类被abstract关键字修饰就是抽象类。 定义很简短,可能会有很多朋友质疑,《java编程思想》中说含有抽象方法的类就是...(1)抽象类由于含有抽象方法(未实现)所以无法实例化,需要被继承 (2)继...
  • 抽象类和接口的区别及使用场景

    千次阅读 多人点赞 2018-07-09 10:22:53
    抽象类和接口的区别及使用场景 1.1 抽象类 1.2 接口 1.3 抽象类和接口的区别 1.3.1 语法层面上的区别 1.3.2 设计层面上的区别 1.4 什么时候使用抽象类和接口 抽象类和接口的区别及使用场景 1.1 抽象类 在...
  • 今天来讲一讲Java中抽象类和接口的区别。类是对象的模板,抽象类和接口都可以看作是实现类的模板。由于从某种角度来看,接口是特殊的抽象类。它们的渊源颇深,有很大的相识之处,所以在选择使用谁的问题上很容易迷糊...
  • php抽象类和接口的区别

    万次阅读 2018-04-04 12:49:04
    php抽象类和接口的区别 tags:抽象类 接口 抽象类和接口 php 引言:这是一个面试经常被问到的问题,也是一个经典问题。我们尽量引用官方权威的说明或者经过实验来证明本文所说的内容准确性。 抽象类 ...
  • Java中抽象类和接口的区别

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

    千次阅读 2020-07-15 17:40:27
    1)实现接口类必须实现抽象类除外,如上述的抽象类testAbs)接口中所有的不带方法体的方法,即staticdefault修饰的方法除外; (2)继承抽象类必须重写(抽象类除外,如上述的抽象类testAbs)他的所有抽象方法;...
  • 抽象类和具体类的区别

    千次阅读 2020-12-08 19:11:42
    抽象类和具体类的区别 概念 抽象类是指被abstract修饰符所修饰的类 具体类则是指没有被abstract修饰符所修饰的类(即大家常说的普通类) 相同点: 抽象类和具体类的类体中都可以声明字段、方法、构造、初始化器、内部...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,044,672
精华内容 417,868
关键字:

抽象类和实现类的区别