我们都知道有关多重遗传的钻石问题 -
A
/ \
B C
\ /
D
Run Code Online (Sandbox Code Playgroud)
这个问题描述了课堂的模糊情况D.如果类A有一个方法,并且/ B和/或C覆盖方法,那么哪个版本的方法会D覆盖?
这个问题是否也适用于Java中的接口?如果没有,Java接口如何克服这个问题?
我知道我们可以使用接口从多个类继承,但是也可以继承状态吗?
如何从2个类继承定义方法并将它们放在Java的第三个类中?
在C#,为什么Equals()方法总是arrays通过比较引用而不是通过比较内容来检查两者之间的相等?
因此,调用Equals()其实现的所有方法(很多)都不能像数组那样工作(它不会比较内容):
示例:
int[] array1 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] array2 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
var u = array1.Equals(array1); //true
var v = array1.Equals(array2); //false
var w = Array.Equals(array1, array2); //false
var x = (new List<int[]>(new int[][] { array1 })).Contains(array2); //false
var y = (new int[][] { array1 }).Any(x => x == array2); //false
var z = (new …Run Code Online (Sandbox Code Playgroud) 我想在C#中实现这一点
(伪代码)
class A;
class B : A;
class C : A, B;
...
A ac = (A)c;
...
B bc = (B)c;
Run Code Online (Sandbox Code Playgroud)
这可能吗?
可能重复:
为什么Java中没有多重继承,但允许实现多个接口
大家好,我是java的新手,当我尝试在java中使用多继承概念时,它显示编译时错误.为什么java不支持它.我听说过关键字但是不知道为什么java直接支持它.请帮我解释一下.
我正在阅读Java中的抽象概念.
这些是我的理解:
这些是我的问题:
当抽象类在所有方法都是抽象的时候可以像接口一样运行时,为什么我们需要单独使用接口?请用一个例子来解释,以便更好地理解.
我们可以在功能的基础上调用Abstract class = Interface + Inheritance吗?因为我们可以与Abstract类一起实现接口和继承的功能.
假设我使用的库提供了以下形状:
class Shape
class Circle extends Shape
class Square extends Shape
Run Code Online (Sandbox Code Playgroud)
但我想介绍红色形状的概念.我无法修改库但我可以创建:
class RedShape extends Shape
Run Code Online (Sandbox Code Playgroud)
然而,这不能轻易扩展到RedCircle因为它不能同时延伸RedShape和Circle.
我不认为装饰器模式在这里工作得很好但是有没有实现这个的技术?
在C++中,您可以扩展许多类,那么这个Java设计的优点是什么类只能扩展一个类?由于接口是一种纯类(实际上是抽象类),为什么不像类扩展一样限制接口的实现数量呢?
我最近参加了一次练习C#技能测试,其中一个问题是,
C#是否支持多重继承?
我回答是的,并且被标记为错误.经过一些在线研究后,它充满了为什么不支持它的答案:
http://www.codeproject.com/Questions/652495/Why-does-csharp-doesnt-support-Multiple-inheritanc
然后我去尝试复制我尝试从已经从基类继承的类继承时应该得到的错误,并且没有错误.我正在使用控制台应用程序,我最近升级到.net 4.5,也许事情发生了变化?
我测试的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Leo bk = new Leo();
bk.avgWords();
Console.ReadLine();
}
public void bubbleSort(int[] input)
{
}
public void insertionSort(int[] input)
{
}
}
public class Gatsby : Books
{
public override void avgWords()
{
Console.WriteLine(5);
}
}
public class Leo : Gatsby
{
public override void avgWords()
{
Console.WriteLine(7);
} …Run Code Online (Sandbox Code Playgroud) 我们可以通过使用抽象类来实现与接口相同的功能,那么为什么java不允许以下代码呢?
abstract class Animals
{
public abstract void run();
}
abstract class Animals1
{
public abstract void run1();
}
class Dog extends Animals,Animals1
{
public void run() {System.out.println("Run method");}
public void run1() {System.out.println("Run1 method");}
}
Run Code Online (Sandbox Code Playgroud)
我知道只使用接口可以实现多重继承,但上面的代码与接口完成的工作相同.
可能重复:
为什么Java或C#中不允许多重继承?
问题: C#是否支持多重继承?
答:是的,使用界面.
现在我的问题:如果我们继承一个接口,那么我们必须实现它.所以我们正在编写自己的代码然后我们如何使用继承的核心概念,即继承接口的可重用性.
因此,通过接口进行多重继承是没用的.如果我错了,那么通过接口进行多重继承有用吗?
java ×7
c# ×4
oop ×4
interface ×3
inheritance ×2
abstraction ×1
arrays ×1
equality ×1
reference ×1