我们有和抽象类一个
:
abstract class A {
public int Id {get; set;}
}
我们有三个实现它的类B
、C
和D
:
class B : A {
public List<string> Comments {get; set;}
public List<string> Categories {get; set;}
}
class C : A {
public List<string> Categories {get; set;}
}
class D : A {
public List<string> Comments {get; set;}
}
正如您所看到的,有些属性是常见的,我想将它们提取到另一个类/接口中。因此,理论上我可以创建以下接口:
interface IWithCategories {
List<string> Categories {get; set;}
}
interface IWithComments {
List<string> Comments {get; set;}
}
接口IA{int Id{get;set;}}
抽象类A:IA{public int Id{get;set;}}
iWithComments
和iWithCategories
将扩展IA
:
C类:A,IWithCategories{公共列表类别{get;set;}}
D类:A,{公开列表注释{获取;设置;}}
我知道,在这一点上,类B
、C
和D
不需要扩展抽象类A
,但是它有一些实现可以在所有类之间共享,比如equals、string和一些受保护的方法。
好吧,为什么接口需要设置器,我假设它们不需要。接口是否需要公开list
而不是ilist
,我认为不需要。然后就有了这些接口定义。
public interface IWithCategories {
IList<string> Categories { get; }
}
public interface IWithComments {
IList<string> Comments { get; }
}
现在,如果这些接口是public的
,您就不能阻止任何选择这样做的人实现它们。如果将它们保留在内部
中,则只有程序集才能使用它们。
如果希望抽象类A
实现这些接口,可以将其定义为,
public abstract class A : IWithCategories, IWithComments
{
abstract public int Id { get; }
abstract public IList<string> Categories { get; }
abstract public IList<string> Comments { get; }
}
public class B : A
{
private readonly int id;
private readonly List<string> categories;
private readonly List<string> comments;
public B(
int id,
IEnumerable<string> categories
IEnumerable<string> comments)
{
this.id = id;
this.categories = (categories ?? Enumerable.Empty<string>()).ToList();
this.comments = (comments ?? Enumerable.Empty<string>()).ToList();
}
public override int Id
{
get { return this.id; }
}
public override IList<string> Categories
{
get { return this.categories; }
}
public override IList<string> Comments
{
get { return this.comments; }
}
}
问题内容: 我发现情况: 问题答案: 您同时满足这两个条件;即。一种实现是同时满足抽象类要求和接口要求。 注意,除非在另一个继承链中使用,否则不需要它。另外,将其移至抽象类定义可能很有意义。
问题内容: 在Java中,您可以创建一个仅包含抽象方法的抽象类。另一方面,您可以创建一个声明相同方法的接口。在这种情况下,可以使用抽象类代替接口吗? 问题答案: 不总是: 一堂课只能延伸 一 堂课 一个类可以实现 多个 接口 Sun文档 进行了更详细的比较: 抽象类与接口 与接口不同,抽象类可以包含非静态和最终字段,并且可以包含已实现的方法。此类抽象类与接口相似,不同之处在于它们提供了部分实现,将
只是延伸问题... 抽象类和接口中的相同方法 假设一个类实现了一个接口并扩展了一个抽象类,两者都有相同的方法(名称签名),但返回类型不同。现在,当我重写方法时,只有当我使返回类型与接口声明相同时,它才会编译。 另外,如果该方法在抽象类或接口中声明为private或final,会发生什么情况? **旁注。在一次采访中,爱因斯坦先生在这个问题上坚持了相当长的时间。有没有一个流行的场景,我们这样做,或者
当我宣布“抽象公共无效显示();”在抽象类测试中,这是创建一个全新的show()方法,还是只引用Inter接口中声明的show()方法?请澄清。
本文向大家介绍Java中接口和抽象类的区别与相同之处,包括了Java中接口和抽象类的区别与相同之处的使用技巧和注意事项,需要的朋友参考一下 1. 抽象类: (1).概念:抽象类是对一种事物的抽象,即对类抽。.抽象类是对整个类整体进行抽象,包括属性、行为。Java抽象类和Java接口一样,都用来声明一个新的类型。并且作为一个类型的等级结构的起点。 (2).格式: (3).说明: A:抽象类中不一定有
我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗