Я хочу знать, в чем заключается необходимость размещения внутри интерфейса класса и интерфейса внутри класса?
class A {
interface B {}
}
interface D {
class E {}
}
Я хочу знать, в чем заключается необходимость размещения внутри интерфейса класса и интерфейса внутри класса?
class A {
interface B {}
}
interface D {
class E {}
}
Это я копирую и вставляю из какой-то ссылки (я ранее делал и делился с вами) Может быть, это может помочь вам немного.
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);
}
Организация.
Задание класса внутри интерфейса связывает этот класс с этим интерфейсом - клиенты, которые используют этот интерфейс, будут иметь доступ к этому классу и всем функциям, которые он предоставляет.
Я видел образец класса внутри интерфейса действительно только в Java 1.4 и ниже, чтобы обеспечить перечисляемый тип, который будет сочетаться с интерфейсом - поскольку интерфейс может использовать только класс, и класс может быть защищен, клиенты, которые используют интерфейс, могут принимать только экземпляры класса, определенные в интерфейсе, как перечисленные значения. Это единственный пример, который я могу придумать - я уверен, что другие существуют, но редко бывает, что я вижу класс внутри используемого интерфейса.
Для перевернутого случая это все еще организация. Указание интерфейса внутри класса означает, что только этот класс должен использовать интерфейс. То, что другие классы и интерфейсы все еще могут использовать этот интерфейс, в зависимости от его уровня доступа, не является точкой - организация документирует намерение интерфейса - используется только в классе, который ее содержит.
Если это полезно вне этого класса, оно должно быть соответствующим образом перенесено на собственный тип. Таким образом, оба этих метода встречаются редко, но их использование в основном заключается в организации кода и документировании его намерения непосредственно через синтаксис Java.
Если функциональность класса тесно связана с интерфейсом, и мы не будем использовать этот класс в любом месте, тогда мы можем определить класс внутри интерфейса.
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();
}
}
Если какая-либо функциональность класса тесно связана с любым интерфейсом в этой ситуации, мы объявляем класс внутри интерфейса.
Некоторое время также полезно обеспечить стандартную реализацию абстрактного метода внутри интерфейса.
создание внутреннего интерфейса класса позволяет программисту иметь ограничения на класс i.e, этот внутренний класс доступен, только если мы реализуем этот интерфейс.