最近我在采访中遇到过这个问题。 我们有两个接口
dff
所以我们需要以这样一种方式实现这一要求:接口dff %>% gather(opinion, values, -text) %>%
ggplot(data = .) +
geom_line(aes(x = text, y = values, group = opinion, color = opinion))
dff %>%
gather(opinion, values, -text) %>%
ggplot() +
geom_bar(aes(y = values, x = text, fill = opinion), stat = "identity")
以打印interface I1{
void m1();
void m2();
void method();
}
interface I2{
void m3();
void m4();
void method();
}
class A implements I1,I2{
void m1(){}
void m2(){}
void m3(){}
void m4(){}
void method(){}
}
和接口I1
method()
来打印{执行时{1}}但是类"Test"
可以实现其中只有一个I2
。(ref)
我们是否有可能实现这一目标。
答案 0 :(得分:1)
您可以为接口中的方法提供默认实现:
public interface I1 {
default void method() {
System.out.println("Test");
}
}
public interface I2 {
default void method() {
System.out.println("Oops");
}
}
实现这两个接口时,您可以使用以下语法选择要调用的默认实现
public class A implements I1, I2 {
@Override
public void method() {
I1.super.method(); //or I2.super.method()
}
}
如果您需要打印"测试哎呀"你也可以调用两个默认实现(并选择顺序)
public class A implements I1, I2 {
@Override
public void method() {
I1.super.method();
I2.super.method();
}
}
在Java 8之前,您可以实现类似的功能,但它更加冗长。 (请注意,我在这里使用某种decorator)
public interface I1 {
void m1();
void m2();
void method();
}
public interface I2 {
void m3();
void m4();
void method();
}
public final class DefaultI1 implements I1 {
@Override
public void m1() {
//TODO
}
@Override
public void m2() {
//TODO
}
@Override
public void method() {
System.out.println("Test");
}
}
public final class DefaultI2 implements I2 {
@Override
public void m3() {
//TODO
}
@Override
public void m4() {
//TODO
}
@Override
public void method() {
System.out.println("Test");
}
}
public final class A implements I1, I2 {
private final I1 i1;
private final I2 i2;
public A(I1 i1, I2 i2) {
this.i1 = i1;
this.i2 = i2;
}
@Override
public void m1() {
i1.m1();
}
@Override
public void m2() {
i1.m2();
}
@Override
public void m3() {
i2.m3();
}
@Override
public void m4() {
i2.m4();
}
@Override
public void method() {
i1.method();
i2.method();
}
}
用法
public static void main(String[] args) {
A a = new A(new DefaultI1(), new DefaultI2());
a.method(); //prints "Test Oops"
}
答案 1 :(得分:-2)
interface I1{
public void m();
}
interface I2{
public void m();
}
public class Test{
public static void main(String[] args){
I1 i1 = new I1(){
public void m(){
System.out.println("W");
}
};
I2 i2 = new I2(){
public void m(){
System.out.println("M");
}
};
i1.m();
i2.m();
}
}