精华内容
下载资源
问答
  • 一个类如何继承两个类
    万次阅读
    2018-12-25 22:01:55

    接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有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个方面逐一去比较回答,接着从第三者继承的角度的回答,特别是最后用了一个典型的例子来展现自己深厚的技术功底。

    更多相关内容
  • java中定义个类可以同时继承两个类  分享| 2013-09-18 17:12yfjmhe | 浏览 19117 次  继承 这句话对还是错?为什么? 专业回答 DM19890110 2013-09-18 17:58 这句话要看怎么理解...

    java中定义一个类可以同时继承两个类

    2013-09-18 17:12 yfjmhe  |  浏览 19117 次
      继承
    这句话对还是错?为什么?
    专业回答
    2013-09-18 17:58
    这句话要看怎么理解去了,一个类不能直接继承两个类比如说这样:
    class A extends B,C
    不能这样写,因为java不支持多继承,
    但是你可以像下面这样实现继承多个类
    class A extends B
    class C extends A
    这样C就同时继承了B和A两个类

    为您推荐:

    2013-09-18 18:48 yb183939718  | 三级
    错误的
    java类是单继承的 不可以同时继承 但是可以多重继承 比如3个类 A,B,C 
    如果C想继承A和B 不可以写 c extends A,B
    但是可以间接继承 如: A extends B 然后 C extends A 这样C 就相当于继承了A ,B
    评论  |  7  0
    2013-09-18 17:23 kevintop3  | 八级
    1
    2
    3
    答案:错误。 
     
    原因:Java不支持多重继承,一个类只能有一个父类,即一个类只能继承一个类,但可以实现多个接口。
    评论  |  7  0
    2013-09-18 17:14 miws_  | 九级
    java不支持多重继承,也就是不能同时继承两个类,但可以实现多个接口。
    评论  |  0  0
    2013-09-18 17:37 jacky8293676  | 四级
    只能说很明显是错的。。java只能继承一个父类。。你可以这样理解。。一个小孩不可能有两个亲生老爸对不?java里面很多都是拟人化的。。
    评论  |  7  0
    2013-09-18 18:17 sanhgjc  | 四级
    是错的,因为java是单继承,可以用以下两个方法,一、class A extends B
    class C extends A。二、将其中的一个定义为接口
    评论  |  2  0
    2013-09-18 21:14 KerryRuan5  | 二级
    这句话还是有歧义的,看你怎么理解,java是单继承的,不可以写 c extends A,B,可以间接继承 如: A extends B 然后 C extends A ,这样C 就相当于继承了A ,B,也就可以写成 C extends B。一个类可以继承多个接口,如:A implemente B ,C.
    评论  |  1  0
    2013-09-18 17:15 banyan_virus  | 五级
    错,java语言不支持多重继承,但可实现多个接口。
    评论  |  1  0
    2013-09-18 17:14 godandghost  | 六级  最快回答
    错,一个类只能继承一个类,但可以实现若干个接口。
    评论  |  2  0
    2013-09-18 17:24 ysdoc  | 八级
    错的,java是单继承。
    评论  |  1  0
    2013-09-18 17:14 yzysust  | 四级
    不对啊,java里面是单继承的,但可以实现多个接口。
    评论  |  1  0
    2013-09-18 17:26 zhupy112  | 三级
    java不能多继承 但是可以实现多个接口
    评论  |  1  0
    2013-09-18 17:16 cepapa22  | 四级
    错 (此括号内的字是为了凑字数)
    评论  |  1  0
    2013-09-18 17:57 royhglian  | 二级
    java不支持类的多继承,支持多接口
    评论  |  1  0
    2013-09-18 17:14 魔君不真2  | 一级
    错、因为java是单继承
    展开全文
  • java中个类不能直接继承两个类比如说这样: class A extends B,C 不能这样写,因为java不支持多继承, 但是你可以像下面这样实现继承多个类 class A extends B class C extends A 这样C就同时继承了B和A两个类在...
    java中一个类不能直接继承两个类比如说这样:
    class A extends B,C
    不能这样写,因为java不支持多继承,
    但是你可以像下面这样实现继承多个类
    class A extends B
    class C extends A
    这样C就同时继承了B和A两个类
    在C++看来,这个多继承就好解决多了
    class A{public:virtual void foo(){printf("A")}};
    calss B{public:virtual void foo(){printf("B")}};
    .
    .
    .
    class x:public A,public B,...
    {
        void foo(){printf("X");};
    }

    知乎上对多继承有比较详细的回答:https://www.zhihu.com/question/21476063
    作者:仲晨 链接:https://www.zhihu.com/question/21476063/answer/18351313 来源:知乎 著作权归作者所有,转载请联系作者获得授权。
    多重继承是一件很复杂、很容易产生问题的功能。它跟Goto语句一样,利弊交织。 以下分两部分叙述,第一部分是Python多重继承遇到的麻烦,第二部分是Java和Ruby如何折中多重继承需求。 ============================================  第一部分: Python是支持多重继承的,但为了解决多重继承的方法查找顺序问题(被称为MRO),有一场苦难史:  1. 传统模式 直接使用深度优先算法(并且,从左向右),每个类选择其第一次出现的位置。比如
    class A:
      def save(self): pass
    class B(A): pass
    class C:
      def save(self): pass
    class D(B, C): pass
    
    作为D类的一个实例,它的成员寻找顺序是:D、B、A、C。
    但当碰到如下这样一个“ 菱形继承”就麻烦了:
    1. class A :
    2. def save ( self ): pass
    3. class B ( A ): pass
    4. class C ( A ):
    5. def save ( self ): pass
    6. class D ( B , C ): pass
    作为D类的一个实例,寻找顺序也是D、B、A、C,但调用其save方法时,到底是调用A中的呢?还是C中的呢?直观上看,应该是C。这里有产生矛盾了。
    2. Python2.2的new-style class模式
    Python2.2中引进了new-style class,说白了就像java一样,所有类都继承自最根本的object类。
    这就让“菱形继承”变成十分普遍,于是只能改变MRO策略。
    仍然 使用深度优先搜索、从左向右,但是每个类选择其最后一次出现的位置。
    这样一来,对上面的“菱形继承”就处理比较完美了,形成的顺序是:D、B、C、A,越是公用基础类,越放在后面。
    但是,碰到 交叉继承,就又懵了。
    <img src="https://pic4.zhimg.com/d067bccb353065c3276a96f6aab93a77_b.jpg" data-rawwidth="113" data-rawheight="179" class="content_image" width="113">这里,X和Y都继承自O,A继承(X,Y)(注意,有先后顺序),B继承(Y,X),再有个最下面的类继承(A,B)。 这里,X和Y都继承自O,A继承(X,Y)(注意,有先后顺序),B继承(Y,X),再有个最下面的类继承(A,B)。
    按照上述算法出来的结果是:?、A、B、Y、X、O。这就有些奇怪了,明明A在B前,A继承的X在Y前,可为啥X的优先级比Y要低呢?
    3. C3算法
    1996年,一帮牛人写了一篇文章 A monotonic superclass linearization for Dylan,提供了一个基于层级计算的线性MRO算法,被称为C3,整体上比较合理了。(算法不详说了)
    在2012年被加入了Dylan语言,2007年加入了Python2.3,此外还有Perl 6、Parrot等语言之中。
    这样虽说基本解决了计算问题,但多重继承本身就有很多让人疑惑的地方,比如:
    <img src="https://pic4.zhimg.com/c1e6e9a3a1df789b9686582a9367326b_b.jpg" data-rawwidth="251" data-rawheight="171" class="content_image" width="251">参考文献: 参考文献:
    python-history.blogspot.jp
    The Python 2.3 Method Resolution Order
    ============================================
    第二部分:
    多重继承那么复杂,可单一继承又那么拘束,咋办呢?
    1. 接口继承
    Java就是那么做的,只允许单一继承类(方法的实现),但可以继承多个接口(方法的定义)。
    Java的接口继承功能,既实现了静态语言的多重继承性,又避免了多重继承的数据构造的冲突和类层次的复杂性。
    但是, 我们并不能说接口是解决问题的完美方案。接口也有不能共享实现的缺点。
    本来只是为了跨越继承层次来共享代码,现在却需要另外生成一个独立对象,而且每次方法调用都要委派给这个对象,这实在是不太合理,而且执行的效率也不高。
    ——《松本行弘的程序世界》
    2. Mix-in
    这是Ruby所推崇的,最初在Lisp中开始使用。规则如下:
    1. 通常的继承都是单一继承。
    2. 第二个以及两个以上的父类必须是Mix-in的抽象类(即不能单独生成实例,不能继承普通类)。
    这种规则下,既能够保持单一继承的结构,又能用Mix-in来共享方法的实现。
    展开全文
  • java中个类不能直接继承两个类比如说这样: class A extends B,C 不能这样写,因为java不支持多继承, 但是你可以像下面这样实现继承多个类 class A extends B class C extends A 这样C就同时继承了B和A两个类
    java中一个类不能直接继承两个类比如说这样:
    class A extends B,C
    不能这样写,因为java不支持多继承,
    但是你可以像下面这样实现继承多个类
    class A extends B
    class C extends A
    这样C就同时继承了B和A两个类
     
    
    在C++看来,这个多继承就好解决多了
    class A{public:virtual void foo(){printf("A")}};
    calss B{public:virtual void foo(){printf("B")}};
    .
    .
    .
    class x:public A,public B,...
    {
        void foo(){printf("X");};
    }

     
    
    知乎上对多继承有比较详细的回答:https://www.zhihu.com/question/21476063
     
    作者:仲晨 链接:https://www.zhihu.com/question/21476063/answer/18351313 来源:知乎 著作权归作者所有,转载请联系作者获得授权。
    多重继承是一件很复杂、很容易产生问题的功能。它跟Goto语句一样,利弊交织。 以下分两部分叙述,第一部分是Python多重继承遇到的麻烦,第二部分是Java和Ruby如何折中多重继承需求。 ============================================ 第一部分: Python是支持多重继承的,但为了解决多重继承的方法查找顺序问题(被称为MRO),有一场苦难史: 1. 传统模式 直接使用深度优先算法(并且,从左向右),每个类选择其第一次出现的位置。比如
    class A:
      def save(self): pass
    class B(A): pass
    class C:
      def save(self): pass
    class D(B, C): pass
    
    作为D类的一个实例,它的成员寻找顺序是:D、B、A、C。
    但当碰到如下这样一个“ 菱形继承”就麻烦了:
    class A:
      def save(self): pass
    class B(A): pass
    class C(A):
      def save(self): pass
    class D(B, C): pass
    
    作为D类的一个实例,寻找顺序也是D、B、A、C,但调用其save方法时,到底是调用A中的呢?还是C中的呢?直观上看,应该是C。这里有产生矛盾了。
    2. Python2.2的new-style class模式
    Python2.2中引进了new-style class,说白了就像java一样,所有类都继承自最根本的object类。
    这就让“菱形继承”变成十分普遍,于是只能改变MRO策略。
    仍然 使用深度优先搜索、从左向右,但是每个类选择其最后一次出现的位置。
    这样一来,对上面的“菱形继承”就处理比较完美了,形成的顺序是:D、B、C、A,越是公用基础类,越放在后面。
    但是,碰到 交叉继承,就又懵了。
    <img src="https://pic4.zhimg.com/d067bccb353065c3276a96f6aab93a77_b.jpg" data-rawwidth="113" data-rawheight="179" class="content_image" width="113">这里,X和Y都继承自O,A继承(X,Y)(注意,有先后顺序),B继承(Y,X),再有个最下面的类继承(A,B)。 这里,X和Y都继承自O,A继承(X,Y)(注意,有先后顺序),B继承(Y,X),再有个最下面的类继承(A,B)。
    按照上述算法出来的结果是:?、A、B、Y、X、O。这就有些奇怪了,明明A在B前,A继承的X在Y前,可为啥X的优先级比Y要低呢?
    3. C3算法
    1996年,一帮牛人写了一篇文章 A monotonic superclass linearization for Dylan,提供了一个基于层级计算的线性MRO算法,被称为C3,整体上比较合理了。(算法不详说了)
    在2012年被加入了Dylan语言,2007年加入了Python2.3,此外还有Perl 6、Parrot等语言之中。
    这样虽说基本解决了计算问题,但多重继承本身就有很多让人疑惑的地方,比如:
    <img src="https://pic4.zhimg.com/c1e6e9a3a1df789b9686582a9367326b_b.jpg" data-rawwidth="251" data-rawheight="171" class="content_image" width="251">参考文献: 参考文献:
    python-history.blogspot.jp
    The Python 2.3 Method Resolution Order
    ============================================
    第二部分:
    多重继承那么复杂,可单一继承又那么拘束,咋办呢?
    1. 接口继承
    Java就是那么做的,只允许单一继承类(方法的实现),但可以继承多个接口(方法的定义)。
    Java的接口继承功能,既实现了静态语言的多重继承性,又避免了多重继承的数据构造的冲突和类层次的复杂性。
    但是, 我们并不能说接口是解决问题的完美方案。接口也有不能共享实现的缺点。
    本来只是为了跨越继承层次来共享代码,现在却需要另外生成一个独立对象,而且每次方法调用都要委派给这个对象,这实在是不太合理,而且执行的效率也不高。
    ——《松本行弘的程序世界》
    2. Mix-in
    这是Ruby所推崇的,最初在Lisp中开始使用。规则如下:
    1. 通常的继承都是单一继承。
    2. 第二个以及两个以上的父类必须是Mix-in的抽象类(即不能单独生成实例,不能继承普通类)。
    这种规则下,既能够保持单一继承的结构,又能用Mix-in来共享方法的实现。
    展开全文
  • 注意,这里有个特别要注意的地方,当子类继承于多个父类时,super() 函数只可用于调用第一个父类的构造函数,其余父类的构造函数只能使用未绑定的方式调用。 class Employee: def __init__(self,salary): self....
  • 设计一个抽象图形,在该中包含有至少两个抽象方法求周长和求面积,分别定义圆形、长方形、正方形继承图形,并实现上述两个方法。并创建实例验证。 直接上代码了 package ThirdDay; abstract class...
  • class 同时继承两个类

    千次阅读 2017-06-11 15:22:17
    public class A{ } public class B extends C{ } public class C extends B{ C里面不需要写 已经有了A和B的所有内容 }
  • //一个类可以从多个基类中派生。在派生类由多个基类派生的多重继承模式中, //基类是用基类表语法成分来说明的,多重继承的语法与单一继承很类似, //只需要在声明继承的多个类之间加上逗号来分隔 class B1 { public:...
  • JS继承方式有很多,主要分ES5和ES6继承的实现 ...是原型链继承:即B.prototype-new A() 二是借用构造函数(call 或者 apply 的方式继承) function B(name,age) { A.call(this,name,age) } 三是组合继...
  • 定义一个名为Cylinder表示圆柱,它继承Circle, 要求定文一个变量height表示圆柱高度。覆盖getAreaO方法求圆柱的表面积,定义getVolume()方法求圆柱体积。定义默认构造方法和带radius和height两个参数的构造...
  • 【Java语法】包 继承 多态 抽象 接口

    千次阅读 多人点赞 2022-03-20 14:17:40
    如果一个类没有 package 语句, 则该类被放到一个默认包中 包的访问权限控制 如果某个成员不包含 public 和 private 关键字, 此时这个成员可以在包内部的其他类使用, 但是不能在包外部的类使用. 二、继承 继承 ...
  • Java的一个子类可以继承自多个父类。答:×放样时的路径允许有几个?()答:1个下列有关有限合伙企业设立条件的表述中,不符合新颁布的《合伙企业法》规定的是( )答:有限合伙企业名称中应当标明\"特殊普通合伙\"字样...
  • Java之继承一个泛型

    千次阅读 2019-07-08 11:43:26
    1、定义一个泛型Parent<T>, 注意:定义:泛型T,使用:实际类型 2、子类继承调用。Son定义时有种方式初始化父类型的类型参数: 法1:用子类中的泛型类型初始化父类: public class Son<T> ...
  • (1)定义一个名为Circle的表圆,其中含有double型的成员变量centerX、centerY表示圆心坐标,radius表示圆的半径。定义求圆面积的方法getArea()方法和求圆周长的方法getPerimeter()。 (2)定义一个带参数构造方法...
  • 编写一个圆柱体Cylinder,它继承于上面的Circle。还拥有: ①一个成员变量 double hight(私有,浮点型); // 圆柱体的高; ②构造方法 Cylinder (double r, double h ) //创建Circle对象时将半径初始化为r ③ ...
  • 8、通过继承Thread的方式创建两个线程,在Thread构造方法中指定线程的名字,并将这两个线程的名字打印出来。 public class MyThread extends Thread{ public MyThread(String name) { super(name); } public ...
  • 一个java可以有多个父类吗?

    千次阅读 2021-02-26 21:02:03
    一个java类不可以有多个父类,只可以有1个父类。Java类只支持单继承,不支持多继承,所以只可以有...Java中父类的意思是:某一个类B继承了类A则说A是B的父类。继承后B拥有A所有的公开方法和属性。Java是一门面向对象...
  • 定义交通工具Vehicle,一个小车Car,一个公共汽车Bus,实现Car、Bus对Vehicle的继承,按以下要求设计: ①交通工具Vehicle,属性包括:品牌、颜色color;方法包括构造方法用来初始化两个成员变量,show方法...
  • Java 继承详解

    千次阅读 2021-02-12 23:53:43
    /*文章中用到的代码只是部分,需要完整代码的可通过邮箱联系我1978702969@qq.com*/在面向对象的语言...1.首先是类继承的写法:继承的关键字:extends格式:public class 类名(子类、派生类、超类) extends 类名(父...
  • 添加额外两个属性:班级class、学号sno。 添加方法:打印学生的所有信息print_info方法。 创建教师Teacher,继承自SchoolPerson, 添加额外两个属性:部门department、工号cno。 添加方法:打印教师的所有信息...
  • 定义交通工具Vehicle,一个小车Car,一个公共汽车Bus,实现Car、Bus对Vehicle的继承,按以下要求设计: ①交通工具Vehicle,属性包括:品牌、颜色color;方法包括构造方法用来初始化两个成员变量,show方法...
  • 展开全部java中对于继承,java只支持单继承。java虽然不e5a48de588b63231313335323631343130323136353331333365646262...因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行...
  • C#-同时继承个类

    万次阅读 2018-12-07 16:14:50
    面试题: using UnityEngine; public class Test : MonoBehaviour { // Use this for initialization void Start() ... IMyInterface my1 = new MyClass1();... IMyInterface my2 = new MyCl...
  • (Triangle)设计一个名为Triangle的继承GeometricObject。该包括: 三个名为side1,side2,side3的double类型数据域来表示这个三角形的三条边,它们的默认值是1.0。 一个无参构造方法,创建一个默认的...
  • 前面我们已经介绍了javascript中6种继承方式,这6中继承方式都是基于es5的,那么接下来我们要讲的是es6中新增的继承方式—— 继承 在es6中新引进了的概念,作为对象的模板。是对现实生活中一具有...
  • 设计一个学生Student和它的一个子类Undergraduate,要求如下: (1) Student有name(姓名)和age(年龄)属性,一个包含两个参数的构造方法,用于...有一个包含三个参数的构造方法,前两个参数用于给继承的name和ag...
  • 步骤:1、定义类继承Thread 2、覆写Thread类的run方法。 自定义代码放在run方法中,让线程运行 3、调用线程的star方法, 该线程有两个作用:启动线程,调用run方法。 代码示例: class Test extends Thread ...
  • 编写一个矩形Rect,继承Rect编写一个具有确定位置的矩形PlainRect,编写PlainRect的测试程序 按要求编写一个Java应用程序: (1)编写一个矩形Rect,包含: 两个protected属性:矩形的宽width;矩形的...
  • 定义一个名为Square的表示正方形,使其继承Shape抽象,覆盖Shape中的抽象方法getPerimeter()和getArea()。编写程序测试Square的使用。 `abstract class Shape { abstract public double getPerimeter(); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,436,028
精华内容 574,411
关键字:

一个类如何继承两个类

友情链接: J2MEzhongwenjc1.01a.rar