我正在练习继承,在C#中使用测试程序,我发现以下语句不会引发错误:
BaseClass baseObj = new DerivedClass();
Run Code Online (Sandbox Code Playgroud)
为什么允许这种说法,是否存在这种说法对程序员有用的情况?
这是我的测试程序:
class BaseClass
{
public void show()
{
Console.WriteLine("Base Class!");
}
}
class DerivedClass : BaseClass
{
public void Display()
{
Console.WriteLine("Derived Class!");
}
}
class Result
{
public static void Main()
{
BaseClass baseObj = new DerivedClass();
baseObj.show();
}
}
Run Code Online (Sandbox Code Playgroud) 我有现有的代码库,有时使用ArrayList或LinkedList,我需要找到一种方法来记录每次调用添加或删除时跟踪已添加或删除的内容.
确保登录到位的最佳方法是什么?
所以举个例子.
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(123);
Run Code Online (Sandbox Code Playgroud)
和
LinkedList<Integer> anotherNewList = new LinkedList<Integer>();
anotherNewList.add(333);
Run Code Online (Sandbox Code Playgroud)
不确定我是否可以拦截add方法来实现这一点,或者创建实现java.util.List接口的重写类,然后使用它.无论哪种方式,我都在寻找一个需要最少干预的优秀解决方案,而且不需要使用任何第三方软件包......
我的问题是:在PHP中,接口对于自己构建网站应用程序的开发人员真的很有用吗?是不是提供界面提供的所有东西的抽象类?
如果一个接口只是一个"契约",那么开发人员是否意识到该类应该实现的东西?
我能想到的唯一一个好处就是一个类可以实现多个接口,但是当你知道一个类应该实现的所有东西时,这又是多么有用.你只是强迫自己实现这些方法.
正如你所知,当我真正理解为什么界面有用时,我仍然在等待那个A-HA时刻.
包装它并简单说明:何时应该使用接口,为什么不使用抽象类呢?
我正在阅读的这本书在迭代时给出了这个例子 vector
for (auto &e: v) {
cout << e << endl;
}
Run Code Online (Sandbox Code Playgroud)
假设v被声明为vector<int> v,换句话说,我们知道这个集合中的元素类型是int.
auto以任何方式使用更好或更喜欢?
for (int &e: v) {
cout << e << endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么?
可能重复:
"编程到接口"是什么意思?
我注意到有些人喜欢将对象声明为它实现的接口之一,即使在变量范围内,也没有必要将其视为接口,例如,没有外部API需要接口.
例如:
Map<String, Object> someMap = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
或者你可以做到
HashMap<String, Object> someMap = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
并java.util.Map完全避免进口.
通过接口(上面第一个)而不是类本身(上面第二个)声明它有什么好处?
谢谢
以下是如何创建的两种方法ArrayList:
List<String/*or other object*/> arrList = new ArrayList();//Imports List, ArrayList
ArrayList<String/*or other object*/> arrList = new ArrayList();//Imports just ArrayList
Run Code Online (Sandbox Code Playgroud)
有什么不同?应该使用哪种方法?
假设我们有以下玩具界面:
interface Speakable
{
public abstract void Speak();
}
interface Flyer
{
public abstract void Fly();
}
Run Code Online (Sandbox Code Playgroud)
我们有一个实现两个接口的类:
class Duck implements Speakable, Flyer
{
public void Speak()
{
System.out.println("quack quack don't eat me I taste bad.");
}
public void Fly()
{
System.out.println("I am flying");
}
}
Run Code Online (Sandbox Code Playgroud)
在这一点上,我看到了不同的方法来调用方法Duck,我无法决定哪一个是最佳实践.考虑这种情况:
public class Lab
{
private static void DangerousSpeakAndFly(Object x)
{
Speakable temp = (Speakable) x;
temp.Speak();
Flyer temp2= (Flyer) x;
temp2.Fly();
}
public static void main(String[] args)
{
Duck daffy= new …Run Code Online (Sandbox Code Playgroud) 在Java中,我们使用Interface对用户隐藏实现。接口仅包含抽象方法,并且由于抽象方法没有主体,因此如果没有构造函数,我们将无法创建对象。像这样
public interface ExampleInterface {
}
Run Code Online (Sandbox Code Playgroud)
public class Example implements ExampleInterface {
private static void main(String[] args) {
// This is not possible
ExampleInterface objI = new ExampleInterface();
// However this is
ExampleInterface[] arrI = new ExampleInterface[10];
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么Java允许创建对象接口数组,以及有人可以在哪里使用它?使用它是一种好的编码习惯,或者最好创建一个实现接口的具体类,然后创建该类的数组。
我是一名初学者.我知道OOP的基础知识,但我还不知道"最佳实践".例如,一个继续出现在编程中的范例是"抽象工厂"设计模式,这似乎相当简单.其背后的一个关键意图是避免使用关键字"new",因为它被认为是有害的.我在编程课程中从未听过这个.有人可以详细阐述这一点吗?为什么我们要避免以这种形式实例化对象?
我有以下课程:
public class AggregationController {
private HashMap<String, TreeMap<Integer, String>> messages;
private HashMap<String, Integer> counters;
Boolean buildAggregateReply;
private boolean isAggregationStarted;
private static HashMap<String, AggregationController> instances = new HashMap<String, AggregationController>();
private AggregationController() throws MbException{
messages = new HashMap<String, TreeMap<Integer,String>>();
counters = new HashMap<String, Integer>();
buildAggregateReply = true;
isAggregationStarted = false;
}
public static synchronized AggregationController getInstance(String id) throws MbException{
if(instances.get(id) == null)
instances.put(id, new AggregationController());
return instances.get(id);
}
Run Code Online (Sandbox Code Playgroud)
我认为这足以避免并发访问,但我收到了这个错误:
HashMap.java
checkConcurrentMod
java.util.HashMap$AbstractMapIterator
java.util.ConcurrentModificationException
Unhandled exception in plugin method
java.util.ConcurrentModificationException
Run Code Online (Sandbox Code Playgroud)
我有10个线程使用这个类,它每100次调用大约抛出一次这个错误.
这个单身人士怎么了?