Java问题:”接口内部创建类“与”类内部创建接口“分别有什么用

两种形式,到底各自都有什么用处??

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方法就可以通过定义来确定它希望发送什么数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值