两种形式,到底各自都有什么用处??
class A {
interface B {}
}
interface C {
class D {}
}
一.接口内部创建类
1⃣️.用法1
如果一个类的功能与一个接口紧密相关,并且我们不打算在任何地方使用这个类,那么我们可以在接口中定义一个类。
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;
}
}
}
在上述代码中,我们将Vehicle类强行绑定到VehicleService这个接口中。
2⃣️.用法2
为了提供接口的默认实现,我们可以在接口中定义这个类
interface:
public interface VehicleService {
public void repair(); //接口中定义的方法
public class DefaultVehicle implements VehicleService{ //为接口提供的默认实现
@Override
public void repair() {
System.out.println(" Default Repair");
}
}
implement class:
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();
}
}
3⃣️.如何创建对象及调用方法
- 创建对象时:
接口名.class名 对象名=new 接口名.class名();
- 调用方法时:
对象名.方法名;
interface Employee {
class PersonalDetails {
String empName = "Ashok";
int age = 25;
String dob = "15-June-1991";
void empDetails() {
System.out.println(empName+ " - " + age + " - " +dob);
}
}
class Designation {
void empDesg() {
System.out.println("Software Engineer");
}
}
}
public class Test {
public static void main(String args[]) {
Employee.PersonalDetails empDetails = new Employee.PersonalDetails();
empDetails.empDetails();
Employee.Designation empDesignation = new Employee.Designation();
empDesignation.empDesg();
}
}
Output:
Ashok - 25 - 15-June-1991
Software Engineer
本段代码我们在Employee接口中定义了两个class。在测试类中,分别创建两个class的对象,并分别调用其方法。⚠️创建对象时:接口名.class名 对象名=new 接口名.class名();
如果该class有构造器,则括号内应传入相应的参数。
二.类内部创建接口
我们先看一段代码:
public class Util {
public interface Worker {
void work();
}
}
public class Demo implements Worker {
public void work() {
System.out.println("Is working");
}
在这个util类里面封装了会改变的Worker,也就是说,util类里面有自己的算法:一部分是固定,另外一部分是可变的,而这个可变的部分就变成了一个接口(接口是特殊的抽象类其实的意思大概的这个worker可能在不同的工作环境有不同的工作方式,例如work(),onvaction()所以在类里面放一个接口不是什么新的设计,而是一种思想方式,让代码扩展性更高。
举例2:
class AdvertFormatting {
public interface VehicleDetails {
String getRegistration();
Make getMake();
Model getModel();
Money getRetailPrice();
}
public Advert format(VehicleDetails details){
// code
}
}
您可能在二手车站点上看到一个示例。需要原始汽车数据并将其格式化为站点广告的类。
这里的关键是,对于它将格式化的数据存在一个特定的规定(即,format方法中的参数)必须是VehicleDetails类型的数据。
这样,您的format方法就可以通过定义来确定它希望发送什么数据。