使用c#4.0 - 构建一个接口和一个实现接口的类.我想在界面中声明一个可选参数,并让它反映在类中.所以,我有以下内容:
public interface IFoo
{
void Bar(int i, int j=0);
}
public class Foo
{
void Bar(int i, int j=0) { // do stuff }
}
Run Code Online (Sandbox Code Playgroud)
编译,但看起来不正确.接口需要具有可选参数,否则它在接口方法签名中无法正确反映.
我应该跳过可选参数并使用可空类型吗?或者这是否按预期工作,没有副作用或后果?
我有一个问题,下面的代码,我隔离到最封闭的形式,我使用Java 8,几乎准备好发布(2014年3月18日),所以我希望在实现本身没有严重的问题,所以它可能/必须是我自己的代码:
注意:代码是用Java 8编写的,它具有各种新功能,包括default接口中的方法实现.
public abstract class Drawable implements DrawableInterface {
}
Run Code Online (Sandbox Code Playgroud)
interface DrawableInterface {
default public boolean isShadowReceiver() {
return false;
}
default public boolean isShadowCaster() {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
public interface ShadowDrawable extends DrawableInterface {
@Override
default public boolean isShadowReceiver() {
return true;
}
@Override
default public boolean isShadowCaster() {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
public class Box extends Drawable implements ShadowDrawable {
}
Run Code Online (Sandbox Code Playgroud)
public class IsolatedBug {
private final Box box;
private final List<Drawable> drawables; …Run Code Online (Sandbox Code Playgroud) 我想TextWatcher为多个EditText字段实现接口.目前我正在使用:
text1.addTextChangedListener(this);
text2.addTextChangedListener(this);
Run Code Online (Sandbox Code Playgroud)
然后重写我的Activity中的方法:
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// do some operation on text of text1 field
// do some operation on text of text2 field
}
Run Code Online (Sandbox Code Playgroud)
然而,这工作正常但我正在寻找其他方法,以便我可以明确地确定当前关注的EditText字段SoftKeyboard.
android interface textwatcher android-edittext android-activity
我需要创建一个基类,它实现了许多方法的接口,例如下面的例子.
是否有更简单的方法来委派这些方法调用而无需创建大量重复方法?
public class MultipleInterfaces implements InterFaceOne, InterFaceTwo {
private InterFaceOne if1;
private InterFaceTwo if2;
public MultipleInterfaces() {
if1 = new ImplementingClassOne();
if2 = new ImplementingClassTwo();
}
@Override
public void classOneMethodOne { if1.methodOne(); }
@Override
public void classOneMethodTwo { if1.methodTwo(); }
/** Etc. */
@Override
public void classTwoMethodOne { if2.methodOne(); }
@Override
public void classTwoMethodTwo { if2.methodTwo(); }
/** Etc. */
}
Run Code Online (Sandbox Code Playgroud) 我想知道有没有什么方法可以让实现者强制声明对象句柄/原语与方法一样.例如:
public interface Rectangle {
int height = 0;
int width = 0;
public int getHeight();
public int getWidth();
public void setHeight(int height);
public void setWidth(int width);
}
public class Tile implements Rectangle{
@Override
public int getHeight() {
return 0;
}
@Override
public int getWidth() {
return 0;
}
@Override
public void setHeight(int height) {
}
@Override
public void setWidth(int width) {
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的方法中,我们如何使用接口强制Tile类声明高度和宽度属性?出于某种原因,我希望只使用界面!
我最初想过将它与继承一起使用.但事情是我必须处理3个班级.
class Tile extends JLabel implements Rectangle {}
Run Code Online (Sandbox Code Playgroud)
会工作.!
但
class …Run Code Online (Sandbox Code Playgroud) 我有一个简单的foo类,我能够转换到集合接口(Map或者List),没有任何编译器错误.请注意,Foo类不实现任何接口或扩展任何其他类.
public class Foo {
public List<String> getCollectionCast() {
return (List<String>) this; // No compiler error
}
public Map<String, String> getCollection2Cast() {
return (Map<String, String>) this; // No compiler error
}
public Other getCast() {
return (Other)this; // Incompatible types. Cannot cast Foo to Other
}
public static class Other {
// Just for casting demo
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将类转换为集合时,为什么Java编译器不会返回不兼容的类型错误Foo?
Foo没有实现Collection.我期望一个不兼容的类型错误,因为给定当前Foo类签名,这不能是一个Collection.
我对这件事情仍然有些困惑.我到现在所发现的是
(这里已经提出了类似的问题,但我还有其他一些观点.)
接口是仅抽象方法和最终字段的集合.
Java中没有多重继承.
接口可用于在Java中实现多重继承.
继承的一个优点是我们可以在派生类中使用基类代码而无需再次编写它.可能这是继承在那里最重要的事情.
现在..
Q1.由于接口只有抽象方法(没有代码)所以我们怎么说如果我们实现任何接口那么它是继承?我们没有使用它的代码.
Q2.如果实现接口不是继承,那么如何使用接口来实现多重继承?
Q3.无论如何使用Interfaces有什么好处?他们没有任何代码.我们需要在我们实现它的所有类中反复编写代码.
那么为什么要制作接口呢?
注意:我找到了一个接口有用的案例.它的一个例子就像在Runnable接口中我们有public void run()方法,我们在其中定义线程的功能,并且内置编码,该方法将作为单独的线程运行.所以我们只需要编写线程中的代码,Rest是预定义的.但是这个东西也可以用抽象类和所有东西来实现.
那么使用接口的确切好处是什么?我们使用Interfaces实现了多重继承吗?
我熟悉Android框架和Java,并希望创建一个通用的"NetworkHelper"类,它可以处理大多数网络代码,使我能够从中调用网页.
我按照developer.android.com上的这篇文章来创建我的网络类:http://developer.android.com/training/basics/network-ops/connecting.html
码:
package com.example.androidapp;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.util.Log;
/**
* @author tuomas
* This class provides basic helper functions and features for network communication.
*/
public class NetworkHelper
{
private Context mContext;
public NetworkHelper(Context mContext)
{
//get context
this.mContext = mContext;
}
/**
* Checks if the network connection is available.
*/
public boolean checkConnection()
{ …Run Code Online (Sandbox Code Playgroud) 几年来,我是一名教学助理,负责介绍编程模块 - 一年级本科生的Java.
它大部分进展顺利,我们设法让学生很好地接受了面向对象的编程,但学生很少看到的一点是接口.
几乎我们给出的任何解释都是因为过于设计而无法用于学习,或者与初学者的位置相差甚远.我们倾向于得到的反应是"我......看",翻译为"我不明白,听起来不太有用".
这里的任何人都有成功教学生接口的方法吗?我不再是助教了,但总是唠叨我.
interface ×10
java ×8
android ×2
inheritance ×2
java-8 ×2
c# ×1
c#-4.0 ×1
casting ×1
collections ×1
delegation ×1
function ×1
oop ×1
parameters ×1
textwatcher ×1