Что такое использование класса внутри интерфейса и интерфейса внутри класса
Я хочу знать, в чем заключается необходимость размещения внутри интерфейса класса и интерфейса внутри класса?
class A {
interface B {}
}
interface D {
class E {}
}
Ответы
Ответ 1
Это я копирую и вставляю из какой-то ссылки (я ранее делал и делился с вами)
Может быть, это может помочь вам немного.
1)
interface employee{
class Role{
public String rolename;
public int roleId;
}
Role getRole();
// other methods
}
В приведенном выше интерфейсе вы сильно привязываете тип роли к интерфейсу сотрудника (employee.Role).
2) Со статическим классом внутри интерфейса у вас есть возможность сократить общий фрагмент программирования: проверка того, является ли объект экземпляром интерфейса и если он вызывает метод этого интерфейса. Посмотрите на этот пример:
public interface Printable {
void print();
public static class Caller {
public static void print(Object mightBePrintable) {
if (mightBePrintable instanceof Printable) {
((Printable) mightBePrintable).print();
}
}
}
}
Теперь вместо этого:
void genericPrintMethod(Object obj) {
if (obj instanceof Printable) {
((Printable) obj).print();
}
}
Вы можете написать:
void genericPrintMethod(Object obj) {
Printable.Caller.print(obj);
}
Ответ 2
Организация.
Задание класса внутри интерфейса связывает этот класс с этим интерфейсом - клиенты, которые используют этот интерфейс, будут иметь доступ к этому классу и всем функциям, которые он предоставляет.
Я видел образец класса внутри интерфейса действительно только в Java 1.4 и ниже, чтобы обеспечить перечисляемый тип, который будет сочетаться с интерфейсом - поскольку интерфейс может использовать только класс, и класс может быть защищен, клиенты, которые используют интерфейс, могут принимать только экземпляры класса, определенные в интерфейсе, как перечисленные значения. Это единственный пример, который я могу придумать - я уверен, что другие существуют, но редко бывает, что я вижу класс внутри используемого интерфейса.
Для перевернутого случая это все еще организация. Указание интерфейса внутри класса означает, что только этот класс должен использовать интерфейс. То, что другие классы и интерфейсы все еще могут использовать этот интерфейс, в зависимости от его уровня доступа, не является точкой - организация документирует намерение интерфейса - используется только в классе, который ее содержит.
Если это полезно вне этого класса, оно должно быть соответствующим образом перенесено на собственный тип. Таким образом, оба этих метода встречаются редко, но их использование в основном заключается в организации кода и документировании его намерения непосредственно через синтаксис Java.
Ответ 3
Если функциональность класса тесно связана с интерфейсом, и мы не будем использовать этот класс в любом месте, тогда мы можем определить класс внутри интерфейса.
package PracticeTest;
public interface VehicleService {
public void repair(Vehicle v);
public class Vehicle{
String vehicleModel;
String vehicleNumber;
public Vehicle(String vehicleModel, String vehicleNumber) {
super();
this.vehicleModel = vehicleModel;
this.vehicleNumber = vehicleNumber;
}
}
}
В приведенном выше классе автомобиль доступен для VehicleService, и мы не используем его нигде.
- Чтобы обеспечить реализацию интерфейса по умолчанию, мы можем определить класс внутри интерфейса
Интерфейс
package PracticeTest;
public interface VehicleService {
public void repair();
public class DefaultVehicle implements VehicleService{
@Override
public void repair() {
System.out.println(" Default Repair");
}
}
Класс реализации
package PracticeTest;
public class busRepair implements VehicleService{
@Override
public void repair() {
System.out.println(" Bus Repair");
}
public static void main(String args[]){
busRepair b = new busRepair();
b.repair();
DefaultVehicle d = new DefaultVehicle();
d.repair();
}
}
Ответ 4
Если какая-либо функциональность класса тесно связана с любым интерфейсом в этой ситуации, мы объявляем класс внутри интерфейса.
Некоторое время также полезно обеспечить стандартную реализацию абстрактного метода внутри интерфейса.
Ответ 5
создание внутреннего интерфейса класса позволяет программисту иметь ограничения на класс i.e, этот внутренний класс доступен, только если мы реализуем этот интерфейс.