2

能不能有一个实现了接口的类,在这个类的实例化过程中选择是否使用接口中的方法?因此具有使用接口的对象 A 和不使用接口的对象 B。

谢谢

更新:

假设你有一个 Professor 类,并且这个类实现了一个名为 Employer 的接口,该接口具有employ(rAssist x) 抽象方法。

现在我想从实现此接口的教授类中实例化 2 个对象对象 A - 教授可以雇用研究助理,对象 B - 教授不能雇用研究助理。

4

5 回答 5

4

能不能有一个实现了接口的类,在这个类的实例化过程中选择是否使用接口中的方法?

不,如果类C实现了接口,那么所有的实例都C将提供接口中声明的方法。

你可以做的是类似

class MyClass implements MyInterface {

    @Override
    void interfaceMethod() {
        System.out.println("Interface method");
    }
}

然后做

MyClass x = new MyClass();

MyClass y = new MyClass() {
    @Override
    void interfaceMethod() {
        throw new UnsupportedOperationException();
    }
};

实际上,x支持使用interfaceMethodwhiley不支持。但请注意...

  • 在编译时y.interfaceMethod不会阻止使用 of ,即类型系统不会强制执行。

  • 使用此解决方案,您实际上是在创建一个(匿名)子类并将MyClass其实例分配给y.

于 2012-07-30T05:21:41.300 回答
1

您的意思是您希望 A 类和 B 类实现一个通用接口,但您不想实现 B 类中的所有方法吗?

简单来说,接口意味着它是一种契约,实现它的所有类都应遵循该契约。因此,如果您希望 B 类实现该接口,则 B 类也应遵循相同的契约。但是如果你不想实现任何方法,你总是可以这样做。

class ISampleInterface {

  void sampleMethod();

  void optionalMethod();

} 

Class A implements ISampleInterface {

    void sampleMethod() {
      //Your Implementation
    }

    void optionalMethod() {
      //Your Implementation
    }
}



class B implements ISampleInterface {

    void sampleMethod() {
      //Your Implementation
    }

    void optionalMethod() {
      throw new UnsupportedMethodException();
    }
}
于 2012-07-30T05:26:10.003 回答
0

不,这不是Interface.

一个Interface保证实现将实现它的签名的合约

于 2012-07-30T05:18:49.197 回答
0

接口的思想是为实现接口的类建立一个义务。如果您有要求,您可以使用 java.lang.reflect.Method 反射类在运行时更改方法的可见性。然而,这不是一个干净的方式。

于 2012-07-30T05:24:09.350 回答
0

1. Interfaces在 Java 中引入是因为Java中不允许多重继承

2.但就Design Pattern用途而言,以下是..

-implement certain Roles

将Dog视为Super 类,但Pet dog 和 Wild dog 可以是接口,可以通过 Dog 类的 Sub Classes 来实现。

- 使用时Behaviors keeps changing

考虑你有一个类绘图,并且在其中绘制方法(),现在绘制可以是描边、着色等......你必须将这些行为封装在接口或抽象类中。

于 2012-07-30T05:25:17.603 回答