一个抽象类实现了某个接口,由这个抽象类派生的具体类了还实现了该接口?好处是什么?

问题描述

一个抽象类实现了某个接口,由这个抽象类派生的具体类了还实现了该接口?好处是什么?就是下面这样:interface InterfaceAA{}abstract class ClassBB implements InterfaceAA{}class ClassCC extends ClassBB implements InterfaceAA{} 问题补充:对众博友的回答进行了细致的分析,再加上自己的理解,你的回答我觉得是比较合理的。首先具体类ClassCC 不实现接口InterfaceAA是没问题的,之所以这么写就是看起来更直接,当我们想看具体类ClassCC 实现了哪个或者哪些接口时,不用沿着继承的层次结构向上找了。如果不写的话还要找其父类ClassBB ,再看父类实现了哪个或者哪些接口。我觉得就有这个好处

解决方案

首先,抽象类没有全部实现接口中的方法,只是实现了一部分.体现了抽象类的作用实现子类的共有方法其次,在继承抽象时,明确它实现的接口,对于代码理解来说,很好理解.比如:class ClassCC extends ClassBB implements InterfaceAA 说明ClassCC不用实现InterfaceAA中的全部方法,因为ClassBB已经实现了一部分更能精确的表达语义
解决方案二:
class ClassCC extends ClassBB implements InterfaceAA 抽象类都已经实现接口了 它的子类就没必要显示实现相同的几口了 多余
解决方案三:
一个抽象类能实现一个接口吗? 要实现一个接口不是要实现它的所有方法吗?而抽象类不是可以有部分实现吗(也就是有些方法可以不实现) 我怎么感觉好像不行啊! 如果是有InterfaceA AstractClassB 和具体类ClassDemoC 倒是可以写成public class ClassDemoC extends AstractClassB implements InterfaceA{ //.....}那位能给我解惑一下?
解决方案四:
class ClassCC extends ClassBB implements InterfaceAA 与class ClassCC extends ClassBB 两种写法没啥区别,只是前者看起来清晰,楼上几位同志的解释好像是针对class ClassCC extends ClassBB implements InterfaceAA与class ClassCC implements InterfaceAA 二者的比较
解决方案五:
我来告诉你,这样在可以提高代码的可扩展性、比如:以后要业务功能需要改动、升级的时候 直接在基类里面增加一个方法、所有子类都可以共用
解决方案六:
哦,不好意思,我刚刚查了,抽象类是可以不实现接口的所有方法的,因为以前没这样用过。所以说你这样写是没错的。 那么,我想要是你这样写的话,我觉得应该是父类不想让其所有子类都实现某些个方法,所以让其需要实现这些个方法的子类再去实现该接口,这样这个子类就可以实现别的子类不用实现的方法了吧,我想应该是这样的,要是所有的子类都从新实现该接口的话,那么就没有意义了,直接到父类把所有方法都实现不就完了嘛,你觉得呢?呵呵,我只是一菜鸟,所有如果说的不对,请不要见怪,呵呵,光棍节快乐。
解决方案七:
这个没意义,因为父类已经实现了该接口,实现了该接口,就必须实现改接口中定义的所有方法,既然你的父类中实现了该方法,那么子类再实现该接口后,当你重写父类中的方法时,便会报错。方法重名了,但是又构不成方法的重载,因为两个方法都是实现于同一个接口,参数都相同。所以说这是个没有任何意义的事。 我们面向接口编程,最主要的好处就是,在接口中没有方法的实现,所以当我们创建实现了该接口的实现类的对象时,我们把接口做为对象的类型,然后实现类作为具体new出来的对象,那么就很好的提高了代码的安全性,只可以在接口中找到方法的定义,根本就找不打方法的具体实现,这就是最大的好处之一。
解决方案八:
好处是看着清晰明白,其实写不写一样

时间: 2024-09-24 00:22:19

一个抽象类实现了某个接口,由这个抽象类派生的具体类了还实现了该接口?好处是什么?的相关文章

设计-为什么在抽象接口中定义抽象类

问题描述 为什么在抽象接口中定义抽象类 在此处定义了一个抽象接口里面定义了抽象方法 public abstract interface IManagerRoot{ public abstract List<?> getList(); } 定义了一个抽象接口继承抽象接口 public abstract interface IManager extends IManagerRoot{} 这个是抽象接口的实现类 public abstract class ManagerRootImpl implem

eclipse 为何没有自动提示对象(实现接口同时继承抽象类)的所有方法?

问题描述 eclipse 为何没有自动提示对象(实现接口同时继承抽象类)的所有方法? PS: 其他普通对象(例如 String 对象)有提示对象的所有方法. public interface BaseDao { ... } public abstract class BaseDaoImpl implements BaseDao {... } public interface BookDao extends BaseDao {... } public class BookDaoImpl exten

java 学习 私有类实现接口 ,一个类继承来的方法和接口实现方法重复第八天

jjava的privete 修饰的方法或者类 都只能在本类或者外部类中访问   . 在内部私有类基础上返回 私有类实现对象   代码 interface Animal   //Animal接口  { void eat();}class zoo   { Animal GetAnimal() {  return new Animal()  {   public void eat()   {    System.out.println("animal eat");   }   };  }Ti

java 抽象类作用-请问各位大神:抽象类出现的原因?

问题描述 请问各位大神:抽象类出现的原因? 为什么会出现抽象类,抽象类的作用是什么呢?举个例子那样最好了. 解决方案 这个问题没办法简单回答. 首先要搞清楚的是继承有什么用,函数重写有什么用.继承和函数重写实现的是代码的复用(一次编写,重复使用) 从最简单的说起.你编写了一个函数,你希望下次还要用,你怎么做?直接调用就是了,是不是? 那么我问你,如果你下次要用,但是代码不完全一样,需要修改下,怎么用?你有两个办法:(1)复制一份代码,再建一个函数.然后在里面改.(2)直接在原来的函数中改,为了保

动态库接口 模版类-C++模版类是否可以作为动态库接口

问题描述 C++模版类是否可以作为动态库接口 C++模版类是否可以作为动态库接口,怎么实现,现在弄出来 template extern "C" __declspec(dllexport) class IDlgT { }; error C2988: 不可识别的模板声明/定义 不能的话请说下原因,不需要解决方式 解决方案 一个原因是模版类都是在头文件中,而你通过dll导出也需要提供头文件,那么你还导出干嘛,别人可以直接用头文件来实例化你的模版类 http://stackoverflow.c

为什么java中的类里面还能声明一个静态的自己

问题描述 为什么java中的类里面还能声明一个静态的自己 如题,感觉这种情况好诡异,能不能解释一下下面这段代码的流程呢?代码如下 public class CameraInterface { private static final String TAG = "yanzi"; private Camera mCamera; private Camera.Parameters mParams; private boolean isPreviewing = false; private f

java-抽象类 子类实现相同方法 想想去执行抽象类中的方法,在从抽象类中调用子类具体方法

问题描述 java-抽象类 子类实现相同方法 想想去执行抽象类中的方法,在从抽象类中调用子类具体方法 如下代码,想得到这样结果execute AA before execute..C execute AA after 应该怎么处理 public class Test { public static void main(String[] args) { C c = new C(); c.A(); } } interface YY { public void A(); } abstract clas

有一个关于Java的小题目,做了好久做不出来,还请大神帮我!

问题描述 有一个关于Java的小题目,做了好久做不出来,还请大神帮我! 请大家帮帮我,明天就要交作业了!5555555 解决方案 哪里做不出来,,,说下 解决方案二: 这是小题目么我想问....85分 解决方案三: 这都是一个功能了好不?关键你这也没说你哪儿不会啊 解决方案四: 页面不会写还是后台不会?你总得说清楚啊 解决方案五: 如果你搭好了框架,还是来张项目目录结构图来看看先

java-有一个关于Java的小题目,做了好久做不出来,还请大神帮我

问题描述 有一个关于Java的小题目,做了好久做不出来,还请大神帮我 package com.ustcsoft.javatraining2016.homework1.zhaoyao;public class homework1 { public static void main(String[] args) { Student student = new Student(); Student student2 = new Student(); Student student3 = new Stu