pta java定义一个ClassName接口,接口中只有一个抽象方法getClassName();设计一个类Company,该类实现接口ClassName中的方法getClassName(),功能是获取该类的类名称;编写应用程序使用Company类
时间: 2025-06-26 10:16:27 浏览: 8
### 定义 `ClassName` 接口并实现 `getClassName` 方法
在 Java 中,可以通过关键字 `interface` 来定义接口。以下是关于如何定义一个名为 `ClassName` 的接口,并在其内部声明 `getClassName` 方法的具体实现。
#### 1. 定义 `ClassName` 接口
```java
public interface ClassName {
String getClassName(); // 声明获取类名的方法
}
```
此部分代码展示了如何定义一个简单的接口 `ClassName`,其中包含了一个抽象方法 `getClassName()`[^1]。
#### 2. 创建 `Company` 类实现 `ClassName` 接口
为了展示接口的实际应用,可以创建一个具体的类 `Company` 并让其实现上述接口中的方法:
```java
public class Company implements ClassName {
private final String name;
public Company(String companyName) {
this.name = companyName;
}
@Override
public String getClassName() {
return this.getClass().getSimpleName();
}
public void displayInfo() {
System.out.println("The company's name is: " + name);
System.out.println("This object belongs to the class: " + getClassName());
}
}
```
在此段代码中,`Company` 类实现了 `ClassName` 接口,并重写了 `getClassName` 方法以返回当前实例所属的类名称。此外还提供了一个辅助方法 `displayInfo` 用于打印公司信息以及调用 `getClassName` 方法的结果[^2]。
#### 3. 测试程序
下面是一个完整的测试案例,演示了如何使用上面定义好的结构:
```java
public class MainApp {
public static void main(String[] args) {
Company google = new Company("Google");
google.displayInfo();
System.out.println("\nDirect call of getClassName(): ");
System.out.println(google.getClassName());
}
}
```
运行以上代码将会输出公司的基本信息及其所在类的名字。这一步骤验证了前面设计的功能是否正常工作[^3]。
---
### 动态代理增强功能(可选扩展)
如果希望进一步利用动态代理技术,在不修改原有业务逻辑的前提下增加额外处理能力,则可以根据引用描述构建如下方案:
假设我们需要记录每次访问某个特定服务的时间戳作为日志保存下来。那么就可以借助于 JDK 提供的标准 API 实现这一点:
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LoggingProxy<T> implements InvocationHandler {
private T targetObject;
public LoggingProxy(T obj){
this.targetObject=obj;
}
@SuppressWarnings("unchecked")
public static <T> T createLoggingProxy(T originalObj, ClassLoader loader, Class<?>... interfaces){
return (T) Proxy.newProxyInstance(loader,interfaces,new LoggingProxy<>(originalObj));
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable{
long startTime=System.currentTimeMillis();
try{
return method.invoke(targetObject,args);
}finally{
long endTime=System.currentTimeMillis()-startTime;
System.out.printf("%s.%s took %d ms.\n",targetObject.getClass().getName(),method.getName(),endTime);
}
}
}
// 使用示例
class MyService implements ServiceInterface{/* ... */}
MyService service=new MyService();
ServiceInterface loggingService=(ServiceInterface)new LoggingProxy<MyService>(service).createLoggingProxy(service,this.getClass().getClassLoader(),ServiceInterface.class);
loggingService.performAction();
```
在这里引入了动态代理的概念,允许我们在实际执行目标对象的操作前后插入自定义行为,比如性能监控或安全校验等附加需求[^4]。
---
阅读全文
相关推荐


















