C# 关于接口、抽象类和具体类的面向对象问题
1)OnCreate是ClsLast类中实例化对象的公共方法但我想将OnCreate方法限制为受保护的C# 关于接口、抽象类和具体类的面向对象问题,c#,java,oop,abstract-class,C#,Java,Oop,Abstract Class,1)OnCreate是ClsLast类中实例化对象的公共方法但我想将OnCreate方法限制为受保护的 interface InterFace { void OnCreate(); } class ClsFirst implements InterFace { @Override public void OnCreate() { } } class ClsLast extends ClsFirst{ } class Test { static void m
interface InterFace {
void OnCreate();
}
class ClsFirst implements InterFace {
@Override
public void OnCreate() { }
}
class ClsLast extends ClsFirst{ }
class Test {
static void main(){
ClsLast objClsAct = new ClsLast();
objClsAct.OnCreate();
}
}
2)如果我在接口中将OnCreate方法设置为受保护
interface InterFace {
protected void OnCreate();
}
我得到的错误如下:
接口方法OnCreate的非法修饰符;仅允许公开和摘要
3)如果我在实现如下接口的ClsFirst类中设置了受保护的方法:
interface InterFace {
void OnCreate();
}
class ClsFirst implements InterFace {
@Override
protected void OnCreate() { }
}
我得到了这个错误:
无法降低从接口继承的方法的可见性
4)当我将ClsFirst更改为抽象类并实现接口时
interface InterFace {
void OnCreate();
}
abstract class ClsFirst implements InterFace {
}
我没有在ClsFirst类中实现OnCreate方法,但是clslat为什么
摘要
非常感谢您从现在起的友好回答。接口方法始终是公开的。您不能缩小这些方法的范围。在抽象类中使用受保护的抽象方法 接口方法始终是公共的。您不能缩小这些方法的范围。在抽象类中使用受保护的抽象方法 实际上,您可以隐藏该方法,直到通过显式实现接口将您的具体类转换为“接口”实例:
abstract class ClsFirst : Interface
{
void Interface.OnCreate()
{
this.OnCreate();
}
protected abstract void OnCreate();
}
ClsFirst last = new ClsLast();
last.OnCreate(); // Compiler Error, since OnCreate() is protected
Interface lastAsInterface = last;
lastAsInterface.OnCreate(); // Works, and calls the abstract OnCreate() method.
实际上,您可以隐藏该方法,直到通过显式实现接口将您的具体类转换为“接口”实例:
abstract class ClsFirst : Interface
{
void Interface.OnCreate()
{
this.OnCreate();
}
protected abstract void OnCreate();
}
ClsFirst last = new ClsLast();
last.OnCreate(); // Compiler Error, since OnCreate() is protected
Interface lastAsInterface = last;
lastAsInterface.OnCreate(); // Works, and calls the abstract OnCreate() method.
接口
?它不会增加任何价值。您已经有了确保所有派生类符合给定约定的方法:
protected abstract void OnCreate();
2) 接口定义了一个公共
合同。通过public
我的意思是,它与接口本身具有相同的可访问性。这就是为什么在定义接口
成员时不允许使用可访问性修饰符的原因
3) 您不能降低任何虚拟成员或接口成员的可访问性,因为这样会破坏接口的约定。在您的示例中,((IOnCreate)ClsFirst).OnCreate()
不可能,因为OnCreate()
不可访问,这意味着ClsFirst
不实现IOnCreate
接口。1)为什么要首先实现受保护的接口?它不会增加任何价值。您已经有了确保所有派生类符合给定约定的方法:
protected abstract void OnCreate();
2) 接口定义了一个公共
合同。通过public
我的意思是,它与接口本身具有相同的可访问性。这就是为什么在定义接口
成员时不允许使用可访问性修饰符的原因
3) 您不能降低任何虚拟成员或接口成员的可访问性,因为这样会破坏接口的约定。在您的示例中,((IOnCreate)ClsFirst).OnCreate()
不可能,因为OnCreate()
不可访问,这意味着ClsFirst
不实现IOnCreate
接口。接口
根据定义是公共合同。通过实现一个接口,您承诺提供一组方法(以及其他语言的属性)
接口与抽象类没有任何共同之处,因为您可以在单个类上实现所需的任意多个接口,并且您可以实现,而不是从中派生
抽象类是一个基类,它类似于一个部分功能的基类,用于在不同的