精华内容
下载资源
问答
  • B 和 C 继承 A,且都重写了 A 中的同一个方法 D 同时继承 B 和 C 对于 B、C 重写的 A 中的方法, D 会继承一个?这里就会产生歧义 考虑到这种二义性问题,Java 不支持多重继承 Java...

    多继承会产生钻石问题(菱形继承)

    • 类 B 和类 C 继承自类 A,且都重写了类 A 中的同一个方法
    • 类 D 同时继承了类 B 和类 C
    • 对于类 B、C 重写的类 A 中的方法,类 D 会继承哪一个?这里就会产生歧义
    • 考虑到这种二义性问题,Java 不支持多重继承


    Java 支持类实现多接口

    • 接口中的方法是抽象的,一个类实现可以多个接口
    • 假设这些接口中存在相同方法(方法名与参数相同),在实现接口时,这个方法需要实现类来实现,并不会出现二义性的问题


    从 JDK1.8 开始,接口中允许有静态方法和方法默认实现。当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错


    PS:在JDK 1.5 上实践,接口可以多继承接口

    package constxiong.interview;
    
    /**
     * 测试继承多接口,实现相同方法
     * 从 JDK1.8 开始,接口中允许有静态方法和方法默认实现
     * 当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错
     * @author ConstXiong
     * @date 2019-11-21 10:58:33
     */
    public class TestImplementsMulitInterface implements InterfaceA, InterfaceB {
    
    	public void hello() {
    		System.out.println("hello");
    	}
    
    }
    
    interface InterfaceA {
    	
    	void hello();
    
    	static void sayHello() {
    		System.out.println("InterfaceA static: say hello");
    	}
    
    	default void sayBye() {
    		System.out.println("InterfaceA default: say bye");
    	}
    }
    
    interface InterfaceB {
    	
    	void hello();
    	
    	static void sayHello() {
    		System.out.println("InterfaceB static: say hello");
    	}
    
    //	default void sayBye() {
    //		System.out.println("InterfaceB default: say bye");
    //	}
    }
    

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • 首先看下面这段代码:(底下有热心网友更正,jdk1.8之后情况确实有点变化,等改天有空继续更) interface a{ void b(); } interface a1 extends a{ void b(); } interface a2 extends a{ void b(); } ...

    首先看下面这一段代码:(底下有热心网友更正,jdk1.8之后情况确实有点变化,等改天有空继续更)

    interface a{
        void b();
    }
    interface a1 extends a{
        void b();
    }
    interface a2 extends a{
        void b();
    }
    interface a12 extends a1,a2{
        void b();
    }
    public class Main {
        public static void main(String args[]){
    
        }
    }
    

    上面a1和a2都继承了接口a,都获得了b方法的定义。然后a12又多重继承了a1和a2。同样,a12获得了b方法的定义。

    但是假设上述代码中的接口都换成类,假如a12没有对b方法作覆盖,那么再假如a1对b方法作了实现,然后a2也对b方法作了实现,那么a12继承的b方法究竟来自于哪个类里的b方法呢?这里似乎舍弃掉哪个方法都不太好。

    所以类的多继承会出现矛盾。

    接口由于都没有具体实现,所以不会出现这个矛盾。

    有人可能会问,那既然没有实现就可以多继承,那么抽象类可以不可以多继承呢?

    答案是不可以的!

    具体为什么不可以,请继续关注我的博客~ 

    好了,还是现在就说吧,抽象类跟普通类在多继承这块我觉得是差不多的。

    看下面代码:

    abstract class a{
        abstract void b();
        void c(){
            System.out.println("c()");
        }
        abstract void d();
        abstract void e();
        abstract void f();
    }
    
    abstract class b extends a{
        abstract void b();
        abstract void d();
        abstract void e();
        void f(){
            System.out.println("f()");
        }
        /*abstract void f();*/
    }
    
    abstract class c extends a{
        abstract void b();
        abstract void d();
        abstract void e();
        abstract void f();
    }
    
    public class Main {
        public static void main(String args[]){
        }
    }

    假设我们有个类d要继承b和c,而且还不重写f方法,那么问题来了,类d里面的f方法是用谁的f方法呢?你可能会觉得,类b都实现了,当然是类b里已经实现的f方法啊?

    你这样认为的话,那java编译器还认为类c里面的抽象方法f也是一个值得保留的特性呢,这时候矛盾就来了...

    但是用接口的话,就很单一了,所有的接口都没有实现~所以随便从哪个接口里来继承并覆盖这个方法都无所谓~

    展开全文
  • Python继承多继承

    千次阅读 2019-08-11 15:17:28
    Python继承多继承 继承 两个中有大量重复的代码,是否能够只写一次 ?抽象出一个更抽象的,放公共代码 通过继承能够重用代码...继承允许一个派生的对象作为一个基类对象对待。例如,有这样一个设计:...

    Python类的继承与多继承

    继承

    两个中有大量重复的代码,是否能够只写一次 ?抽象出一个更抽象的类,放公共代码
    通过继承能够重用代码,方便代码的管理和修改
    继承并不是复制变量空间,子类更新成员变量,但是父类的成员变量不会随之更新。
    继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类。
    我们生活中的直系亲属之间的遗传类似于继承,如图
    在这里插入图片描述
    继承并不是复制变量空间,子类更新成员变量,但是父类的成员变量不会随之更新。

    #继承并不是复制变量空间,子类更新成员变量,但是父类的成员变量不会随之更新。
    class A(object):
        name = 'a_name'
    class B(A):
        pass
    print(A.name,B.name)
    B.name = 'b_name'
    print(A.name,B.name)#子类B更新成员变量,但是父类A的成员变量不会随之更新。
    
    a_name a_name
    a_name b_name
    

    通过继承能够重用代码,方便代码的管理和修改

    #通过继承能够重用代码,方便代码的管理和修改
    #Define a class called Rectangle    定义一个长方形类
    class Rectangle(object):
        def __init__(self,length,width):
            self.length = length
            self.width = width
        def get_area(self):
            return self.length * self.width
    #Compute the area of rectangle_a   计算长方形的面积
    rectangle_a = Rectangle(20,30)
    print(rectangle_a.get_area())
    #Define another class named Square which is the subclass of Rectangle 定义Rectangle的子类Square
    class Square(Rectangle):
        pass
    #Compute the area of square_b  计算正方形b的面积  正方形是特殊的矩形计算矩形面积的公式也适用于正方形,这显然节省了代码量
    square_b = Square(20,20)
    print(square_b.get_area())
    
    600
    400
    

    多继承

    多继承时的相同方法的继承顺序,相同方法的话从左到右依次检索

    class Dog:
        def specialty(self):
            print('aaaaa')
    class God:
        def specialty(self):
            print('God')
    class God_Dog(Dog,God):   #谁先继承就用谁,相同方法的话从左到右依次从God_Dog,Dog,God检索
        def specialty(self):
            print('my')
            God.specialty(self)
            super().specialty()#常用的方式,先导入先用
            Dog.specialty(self)
    a = God_Dog()
    a.specialty()
    print(God_Dog.mro())  #查看检索方法时的顺序
    #相同的方法调用时按照先传入先调用
    
    my
    God
    aaaaa
    aaaaa
    [<class '__main__.God_Dog'>, <class '__main__.Dog'>, <class '__main__.God'>, <class 'object'>]
    
    展开全文
  • 一个类,可以继承一个普通继承它的成员变量和方法;也可同时继承一个接口,继承接口的方法并完成定义。有一个神奇的魔法:同一种对象,都是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是接口类,那么,它就只能执行接口里的方法。如果我有幸你读到这篇文章,你可以对已经赋了子类对象的接口类对象使用子类才有的方法,看编译器是如何报错的。谢谢

    展开全文
  • Python中多继承

    千次阅读 2019-05-21 18:02:49
    文章目录Python中多继承多继承Python多继承实现多继承的缺点Mixin*思路1**思路2**思路3**思路4*Mixin Python中多继承 Python2.2之前是没有共同的祖先的,之后,引入object,它是所有的共同祖先...
  • java 不支持多继承,但可以实现多个接口,间接的实现多继承,也可以通过内部。 参考代码:MultiExtendsTest // 测试间接的实现多继承 public class MultiExtendsTest extends D implements A, B, C { @...
  • 如何定义一个不能被继承

    千次阅读 2016-11-08 21:19:41
    如何定义一个不能被继承???  假设有一个类B,如果把B的构造函数声明为私有的,那么B这个就不能被继承,但是这也引入了一个问题,不能在外定义B类型的对象,那要怎么解决这个问题呢??? 方法...
  • java 一个接口可以继承多个接口吗

    千次阅读 2018-06-19 14:36:33
    Interface3 Extends Interface0, Interface1, interface……不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承一个呢?但接口不存在这样的问题,接口全都是抽象方法继承....
  • Interface3 Extends Interface0, Interface1, interface……不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承一个呢?但接口不存在这样的问题,接口全都是抽象方法继承...
  • 如何让一个类不能被继承

    千次阅读 2015-12-03 11:56:36
    二是,将该继承一个父类,但是该父类的构造函数是带private属性的。 关于第二个方法可行的依据是: 1)派生不能调用父类private属性的构造函数。 2)建立一个对象是,如果这个对象中含有从虚基类继承来的...
  • 还是说如果将自己创建的类继承一个类的话 那这个自己创建的就不会再继承Object 了? 有点晕了 今天遇到一题母说 java中最多可以继承几个 填空题的,差点写了2了
  • java中一个类不能直接继承两个比如说这样: class A extends B,C 不能这样写,因为java不支持多继承, 但是你可以像下面这样实现继承多 class A extends B class C extends A 这样C就同时继承了B和A两个在...
  • java只允许继承

    千次阅读 2017-04-25 22:22:55
    java中只能单继承一个类只能有一个直接父类,可以有个间接父类。 java通过接口来实现多继承,接口里只有方法的声明没有实现。 C++中可以实现多继承多继承可能会多继承可能会导致钻石环问题---假设...
  • java中一个类不能直接继承两个比如说这样: class A extends B,C 不能这样写,因为java不支持多继承, 但是你可以像下面这样实现继承多 class A extends B class C extends A 这样C就同时继承了B和A两个
  • String能被继承吗?为什么

    千次阅读 2019-07-09 07:54:32
    1、修饰当用final去修饰一个类的时候,表示这个不能被继承。注意:a. 被final修饰的,final中的成员变量可以根据自己的实际需要设计为fianl。b. final中的成员方法都会被隐式的指定为final方法。说明:在...
  • 为什么JAVA只允许继承

    千次阅读 2015-09-09 08:50:49
    一个只能继承一个其他的  在Java语言中禁止多重继承:一个可以具有个直接父类。多重继承不合法的原因是容易引发意义不明确。例如,有一个C,如果允许它同时继承A与B(class C extends A,B{}),假如...
  •  1 java 如果出现多继承、父类中都有相同的属性和name 值 子类如果使用父类的属性和name 值 无法确定是哪一个父类的是 属性和name值。  2 父类中如果相同的方法,并且子类并没有覆盖该方法。子类调用父类的时候 ...
  • 解释:子类如果能继承多个父类,如果多个父类中存在同名属性或者方法,子类继承时将不能判断继承自哪个父类的属性和方法,所以之间不能多继承。 接口之间可以多继承 解释:接口中的属性都是静态常量,不能被继承...
  • Java中的单继承,接口的多继承

    千次阅读 2017-10-22 10:30:21
    结论: Java(class)是只能单继承;(classB Extends classA) Java接口(interface)是可以多继承(Interface3 Extends Interface0, Interface1, interface2...) (PS:Java理论上是只支持单继承,但是可以使用...单继承:一个
  • 设计一个不能被继承

    千次阅读 2012-02-19 20:33:49
    在c++中每个一个构造函数和一个析构函数,即使用户不明确定义,系统也会定义一个默认的构造函数和析构函数。当创建该的对象可以显示或者隐式调用构造函数,当对象销毁时会自动调用析构函数。 当有子类...
  • 1:假设我们已经比较熟悉COM了(VS2005) 问题集合: 001:我要创建一个继承个接口的组件用ATL"添加简单对象向"导->添加->ATL->ATL简单对象用Atl向导生成的组件默认之继承一个接口。假设组建为...
  • 2. 抽象类继承,如果子类也是一个抽象,并不要求一定重写父类方法。如果子类不是抽象,则要求子类一定要实现父类中的抽象方法。3. 接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象,...
  • C++中定义一个不能被继承

    千次阅读 多人点赞 2015-08-31 10:56:16
    最开始是从构造函数开始着手(先声明这种方法不能定义一个不能被继承,这是一种错误的方法,但是很容易往这方面想),假设存在下面的继承体系: 现在假设B是一个不能被继承,那么如果存在B的子类C,那么C的...
  • C++类继承

    千次阅读 2018-10-21 22:18:34
    多继承、多重继承和虚拟继承6.模板 1.is-a继承 1.1公有继承 特性: //保持基类的访问权限不变,基类数据成员只能通过基类的方法访问 //派生需要自己的构造函数,创建对象时,需要使用成员初始化列表,将基...
  • java接口可以继承多个接口

    千次阅读 2019-03-07 19:11:54
    接口是常量值和方法定义的集合。接口是一种特殊的抽象。...不允许类多重继承的主要原因是,如果A同时继承B和C,而b和c同时有一个D方法,A如何决定该继承一个呢? 但接口不存在这样的问题,接口全都是抽象方法...
  • java实现多继承

    千次阅读 2015-03-13 12:17:09
    在java中,原则上是不允许多继承的,也就是之间只可以单继承。 那么,有没有办法,可以在不使用接口的情况下实现多继承呢? 答案是可以。 使用内部就可以多继承,严格来说,还不是实现多继承,但是这种方法...
  • 动物继承

    千次阅读 2018-04-24 18:25:53
    1.在一个名为Test.java的文件中定义四个:动物Animal,狗Dog和猫Cat继承Animal,测试Test,要求编写代码的同时编写简单注释。 2.动物Animal要求体现以下内容: (1) 私有成员变量:姓名name,年龄age...
  • C++多继承

    千次阅读 2019-03-06 10:12:32
    在C++语言中,一个派生可以从一个基类派生,也可以从个基类派生。从一个基类派生的继承称为单继承;从个基类派生的继承称为多继承。 1.继承的三种方式 公有继承(public),私有继承(private),保护继承...
  • java如何实现多继承

    万次阅读 热门讨论 2018-09-03 16:26:00
    在java中,原则上是不允许多继承的,也就是之间只可以单继承。 那么,有没有办法,可以在不使用接口的情况下实现多继承呢? 答案是可以。 使用内部就可以多继承,严格来说,还不是实现多继承,但是这种方法...
  • es6 javascript的Class 继承

    千次阅读 2016-12-09 18:28:13
    class ColorPoint extends Point {}上面代码定义了一个ColorPoint, 该通过extends关键字, 继承了Point的所有属性和方法。 但是由于没有部署任何代码, 所以这两个完全一样, 等于复制了一个Point。 下面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 545,577
精华内容 218,230
关键字:

一个类允许多继承吗