精华内容
下载资源
问答
  • 一个类可以只能继承一个抽象,为什么接口可以多继承接口。谢谢大神帮我回答
  • 抽象能继承接口

    千次阅读 2017-09-21 10:21:43
    1. 抽象可以继承普通,但不可以继承接口。 (public abstract class 抽象 extends 普通 { }) 2. 接口可以继承多接口,但不可以继承抽象。 (public abstract class 接口1 extends 接口2,接口3 ,接口4{ }...

    1.   抽象类可以继承普通类,但不可以继承接口。    (public abstract class 抽象类 extends 普通类 { })

    2.   接口可以继承多接口,但不可以继承抽象类。     (public abstract class 接口1 extends 接口2,接口3 ,接口4 { })

    3.   抽象类可以实现单接口。(public abstract class 抽象类 implements 接口1 { })

    4.   接口类不可以实现抽象类。

     

    ===========================================================================

    抽象类(abstract class)

    抽象类是一种特殊的类,与类的区别只是抽象类不能被实例化,既然不能被实例化(Person p = new Person();),所以抽象类必须被继承,才能被使用。

    因为抽象类是特殊的类,本质上还是类,所以抽象类拥有类所具有的一些特征:属性、方法、不带方法体的方法(抽象方法);

    抽象类也可以和类一样,实现接口、多接口等,但抽象类区别于类,不需要实现接口下的所有方法。

    用途:例如需要一个类,但是不需要有具体执行的代码,那么就可以把这个类写成抽象类。

    关键字:abstract

    如下,抽象类的写法,这里代码只是给解释一下抽象类的特征

    /** 抽象类 */
    public abstract class Persion {
      public String name;
      public void eating() {
        System.out.println("Persion --- eating");
      }
      public abstract void running();
    }

    如果想使用抽象类,那就需要子类继承它

    抽象类(Persion)被子类(Man)继承后,就会强迫子类重写抽象类中定义的抽象方法,除非子类也是抽象类。

    在子类的方法中自定义可执行代码

    /** 子类 */
    public class Man extends Persion{
      public void running() {
        System.out.println("Man --- running");
      }
    }

    如果子类(Man)继承抽象类(Persion)后,那么就可以在测试类里通过抽象类Persion类型去引用子类的实例

    /** 测试类 */
    public class Test {
      public static void main(String[] args) {
        Persion p = new Man();// 普通类继承抽象类
        p.running();
      }
    }
    

     如果子类也是抽象类,那么可以不用重写父类的方法

    /** 子类 */
    public abstract class Man extends Persion{
     // 抽象类继承抽象类,不需要重写父类方法
    }

    接口(interface)

    接口不是类,它由关键字interface声明,既然不是类,那接口就需要有自己的书写规范,也可以说“接口就是个规范”。

    深层次的问题:为啥要用接口,除了多态的理论,其它的我这里暂时无法解释,因为我还接触不到。。。

    接口比抽象类更抽象,接口里不能有变量,但可以有全局静态常量 public static final

    public static String str = "ABC"; // 静态变量
    
    public static final String str = "ABC"; // 静态常量

    接口可以有方法,但所有的方法只能是“类要实现的方法”,而且是“不带方法体的方法”,也就是抽象方法

    接口中的所有方法是抽象方法,默认类型:public abstract

    关键字:interface

    如下,写一个汽车接口,

    public interface Car {
      public String color();// 默认格式:public abstract String color();
    }

    接口可以继承接口、多接口,从而实现接口之间的多继承。它区别于类,因为类只能继承一个类

    public interface Interface03 extends Interface01,Interface02{
     ....
    }

    这里有必要提几句,既然是做编程,一定要规范必要的关键字的用法,及读法

    abstract 是抽象的关键字,例如修饰一个类、一个方法

      public abstract class Persion { }

      public abstract String color();

    extends 是继承的关键字,例如子类Man继承父类Persion:

        public class Man extends Persion { }

    interface 是接口的关键字,例如接口Car :

        public interface Car { }

    implements 是接口实现的关键字,例如Audi类实现Car的接口(也可以说是Audi类是接口Car的实现类) :

        public interface Audi implements Car { }

    接口不能实现接口 

    public interface Interface03 implements Interface01,Interface02 { // 错误写法
    	
    
    }

    ----------------------------------------------------------------

    以上均为个人分析的观点,有问题留言

    展开全文
  • 也可同时继承自 一个接口,继承接口的方法并完成定义。有一个神奇的魔法:同一种对象,都是IAct对象,调用同一种方法Act() 。但是执行的情况却完全不一样。要注意的是,一个接口对象,只能执行接口里的方法,即使...

    一个类,可以继承自一个普通类,继承它的成员变量和方法;也可同时继承自 一个接口,继承接口的方法并完成定义。

    using System;
    
    namespace Interface
    {
    interface IAct{
    	void Act();
                  }
    class Human {
    	string name;
    	float length;
    	public Human(string n,float l)
    		{
    		name = n;
    		length = l;
    		}
    	public void Describe()
    		{
    		Console.WriteLine("My name is {0},my length is {1}",name,length);
    		}
    			}
    class Man:Human,IAct {//一个类,可以继承自一个普通类,也可同时继承自一个接口
    	public Man(string n,float l):base(n,l)
    		{ }
    	public void Act()//对接口里的方法定义
    		{
    		Console.WriteLine("my limbs move and my mouth open and close");
    		}
    	 				  }
    
    class Woman:Human,IAct{//一个类,可以继承自一个普通类,也可同时继承自一个接口
    	public string characteristics;//在继承之外,也可再定义新成员
    	public Woman(string n,float l):base(n,l)
    		{
    		characteristics = "My temperament is special";
    		}
    		public void Act()//对接口里的方法定义
    		{
    		Console.WriteLine("My limbs move and tooth tear");
    		}
    						}
    
    
    class Program{
    	public static void Main(string[] args)
    		{
    		IAct iA1,iA2;
    		iA1 = new Man("gyg",171);
    		iA2 = new Woman("gyy",165);
    		iA1.Act();
    		iA2.Act();
    		Console.Write("Press any key to continue . . . ");
    		Console.ReadKey(true);
    		}
    			  }
    }

    在上面的代码里面,不仅阐述清楚了一个类继承自普通类和接口的做法。还有一个神奇的魔法:同一种对象,都是IAct对象,调用同一种方法Act() 。但是执行的情况却完全不一样。


     了解了这个魔法的原理,就知道它其实是很合理的。

    因为Man类和 Woman类都是继承自IAct类。那么一个Man或Woman对象自然也是一个IAct对象。因此将对象声明成IAct类型,但是赋给它的却是Man或者Woman对象,在后者,IAct中的方法已经个性化定义过了。因此,调用同一个方法,但是执行情况却不同

    要注意的是,一个接口类对象,只能执行接口里的方法,即使返给它的是子类的对象。只要它的type是接口类,那么,它就只能执行接口里的方法。如果我有幸你读到这篇文章,你可以对已经赋了子类对象的接口类对象使用子类才有的方法,看编译器是如何报错的。谢谢

    展开全文
  • 而抽象在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象一个典型应用,假设某个项目的所有Servlet都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个...

    接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,伪代码如下:

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public abstract class BaseServlet extends HttpServlet {
        public final void service(HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException {
            // 记录访问日志
            // 进行权限判断
        }

        protected abstract void doService(HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException;
            // 注意访问权限定义成protected,显得既专业,又严谨,因为它是专门给子类用的
    }

    class MyServlet1 extends BaseServlet {
        protected void doService(HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException {
            // 本Servlet只处理的具体业务逻辑代码
        }
    }

    父类方法中间的某段代码不确定,留给子类干,就用模板方法设计模式。

    备注:这道题的思路是先从总体解释抽象类和接口的基本概念,然后再比较两者的语法细节,最后再说两者的应用区别。比较两者语法细节区别的条理是:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较回答,接着从第三者继承的角度的回答,特别是最后用了一个典型的例子来展现自己深厚的技术功底。

    展开全文
  • 1、接口可以继承接口,抽象不可以继承接口,但可以实现接口。 2、抽象可以继承实体。抽象可以实现(implements)接口,抽象是否可继承实体,但前提是实体必须有明确的构造函数。 3.抽象可以继承实体...

    1、接口可以继承接口,抽象类不可以继承接口,但可以实现接口。

    2、抽象类可以继承实体类。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

    3.抽象类可以继承实体类,就是因为抽象类的可以继承性和有方法。

    4、一个接口可以继承多个接口. interface C extends A, B {}是可以的. 一个类可以实现多个接口: class D implements A,B,C{} 但是一个类只能继承一个类,不能继承多个类 class B extends A{} 在继承类的同时,也可以继承接口: class E extends D implements A,B,C{} 这也正是选择用接口而不是抽象类的原因。

    展开全文
  • 接口继承接口实现接口

    千次阅读 2019-09-25 21:58:05
    接口继承接口 1.之间是单继承的,直接父类只有一个 2.与接口之间是多实现的,一个类可以有多个接口 3.接口与接口之间是多继承的 注意事项: 1.多个父接口当中的抽象方法如果重复没有关系(抽象的没事,没有...
  • 在java中 一个类中不能继承多个接口,但是可以通过一个接口继承多个接口来实现。具体代码如下public interface LanguageBeharvior { public void language(); }public interface SpeakBeharvior { public void ...
  • 接口 接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
  • B 和 C 继承 A,且都重写了 A 中的同一个方法 D 同时继承 B 和 C 对于 B、C 重写的 A 中的方法, D 会继承一个?这里就会产生歧义 考虑到这种二义性问题,Java 不支持多重继承 Java...
  • 在 IntelliJ IDEA 中这个查看一个类也就是当前的所有继承关系,包括实现的所有的接口继承, 这个继承,不仅仅是一级的继承关系,包括好几层的继承。父类的父类的父类。直到最后。 可以很清楚明了的了解一个...
  • - 注意“继承(extends)”和“实现(implements)”的说法区别。 接口和普通之间: 一个接口可以继承多个接口:interface C extends A,B{} ...一个类继承类的同时可以实现一个(或多个)接口:class E ...
  • 这是因为如果一个类继承了A, 又继承了B,若AB有两个相似的方法,没办法确定继承一个方法,所以继承只能是一对一的。但是一个类可以有多个子类, 一个类只能有一个父类。2、接口之间可以表示为...
  • 接口继承 类继承 是有区别的哈
  • 当A想要实现一个接口中个别方法是(不是所有方法),可以创建一个抽象去实现该接口,然后在有A继承这个抽象。注意:这个抽象必须重写这个接口的所有方法,A才可以实现其中的个别方法;如果抽象没有...
  • 这里需要说明,当一个具体类没有写构造函数时,系统会自动生成默认的无参构造器,意味着没有写构造函数的具体类也可以被抽象类继承。但是,一旦将具体类的无参构造器设置访问修饰符为 private 时,抽象类则不可以...
  • 先说接口:接口有 接口继承接口 和 接口的实现 单个接口的实现很好理解:如“大雁”实现了“飞翔”接口 ...我们定义了一个发球的接口和一个生孩子的接口 发球 public interface ServeBall { public void ...
  • 类继承接口

    千次阅读 2010-09-27 09:20:00
    但是也有人认为说类继承接口也无伤大雅,但我个人认为正确的用语可以加深概念理解的正确性。 下面用段代码解释继承和实现的区别 using System; public interface ITest { } public
  • 一个类继承多个接口的简单例子

    千次阅读 2013-04-23 21:43:41
    随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。 class 丈夫 implements 洗衣工,搬运工,提款机{ ...
  • 一个接口能继承一个接口,和之间的继承方式比较相似。接口继承使用extends关键字,子接口继承接口的方法。 下面的Sports接口被Hockey和Football接口继承: // 文件名: Sports.java public interfa
  • 如何定义一个继承

    千次阅读 2016-11-08 21:19:41
    如何定义一个继承???  假设有一个类B,如果把B的构造函数声明为私有的,那么B这个就不继承,但是这也引入了一个问题,不外定义B类型的对象,那要怎么解决这个问题呢??? 方法...
  • //一个子类可以同时继承抽象和实现接口 //接口 interface A{ public static final String FLAG="天河学院"; public abstract void print(); public abstract String getInfo(); } //抽象 ...
  • 在java中,接口也可以被继承,即通过关键字extends声明一个接口是另一个接口的子接口。由于接口中的方法和变量都是public,子接口继承父类接口中的全部方法和变量。 举例: interface a{} interface b ...
  • 类继承接口继承的差别

    千次阅读 2018-12-10 10:09:02
    类继承根据一个对象的实现定义了另一个对象的实现。简而言之,它是代码和表示的共享机制。 接口继承描述了一个对象什么时候被用来替代另一个对象。 ...
  • 有道云笔记链接可查看:IDEA中新建一个java,无法实现Servlet接口或者继承HttpServlet 问题描述: 新建一个java,无法实现Servlet接口或者继承HttpServlet 原因: 缺少tomcat的libraries(HttpServlet...
  • java 一个接口可以继承多个接口

    千次阅读 2018-06-19 14:36:33
    Interface3 Extends Interface0, Interface1, interface……不允许多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承一个呢?但接口不存在这样的问题,接口全都是抽象方法继承....
  • 分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 接口可以继承接口,而且支持多重继承。 抽象可以实现(implements)接口。 抽象...
  • 哪些类继承了Collection接口

    千次阅读 2019-08-14 17:30:18
    1、Collection接口...2、 Set接口Set接口继承于Collection接口,它没有提供额外的方法,但实现了Set接口的集合中的元素是无序且不可重复。特征:无序且不可重复。 3、 List接口List接口同样也继承于Colle...
  • 问题描述:TSaleOutDao即要...解决办法:先用抽象类继承TIBizDao,然后再把需要实现的接口方法声明为抽象方法。然后再用TSaleOutDao继承TABizDao.//IBizDao.pas单元文件 unit IBizDao;interfacetype TIBizDao=interfac
  • 接口可以继承接口。抽象可以实现(implements)接口,抽象可继承实体,但前提是实体必须有明确的构造函数。
  • 1、的单继承 这是父类代码: 这是子类代码: 调试代码及结果: ... 2、接口的多实现 ...总结:从上面的结论可以看出可以单继承类和多实现接口接口接口的多继承多实现接口效果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,014,057
精华内容 405,622
关键字:

一个类所能继承的接口