Java查找工程下继承了某父类的文件

本文介绍了一种使用Java编程语言来查找并打印出指定目录下所有继承自特定父类(Cmd.class)的Java源文件的方法。通过递归遍历目录结构,此程序能够有效地定位并列出所有符合条件的文件。

实例:利用Java实现获取工程下所有继承了Cmd.class这个父类的所有Java文件,打印输出。

详细代码如下:

package common.file;

import java.io.File;

import common.cmd.Cmd;
public class SearchFile4Superclass {
	
	public static void main(String[] args) throws Exception {
		String packageName = "";
		File root = new File(System.getProperty("user.dir") + "\\src");
		String type = ".java";
		Class<?> superClass = Cmd.class;
		getFile(root, packageName, superClass, type.length());
		
	}
	
	public static void getFile(File folder, String packageName, Class<?> superClass, int typeLength) throws Exception {
		File[] files = folder.listFiles();
		for (int i = 0; i < files.length; i++) {
			File file = files[i];
			if (file.isDirectory()) {
				getFile(file, packageName + file.getName() + ".", superClass, typeLength);
			} else {
				outFile(file.getName(), packageName, superClass, typeLength);
			}
		}
	}
	
	public static void outFile(String filename, String packageName, Class<?> superClass, int typeLength) {
		try {
			String name = filename.substring(0, filename.length() - typeLength);
			if(Class.forName(packageName + name).getSuperclass()!=null 
					&& Class.forName(packageName + name).getSuperclass().getName().equals(superClass.getName())) {
				System.out.println(filename);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}


<think>首先,用户的问题是:“我想查找Java中子继承父类无参构造方法的方法 请问Java中子继承父类无参构造方法的方式”。基于引用,我需要总结并提供答案。 回顾引用: - 引用[1]:显示了在子中使用 super() 显式调用父类的无参构造方法。 - 引用[2]:解释了如果子不显式调用 super,系统会默认调用父类的无参构造方法,但如果父类没有无参构造方法,会报错。 - 引用[3]:再次强调默认情况下,子构造函数会隐式调用父类的无参构造函数。 - 引用[4]:列出继承的内容,包括构造方法,但子不能继承私有构造方法。 - 引用[5]:提供了代码示例,显示子如何通过 super() 调用父类的构造方法。 关键点:子不会“继承父类的构造方法;它通过调用父类的构造函数来初始化继承的部分。对于无参构造方法: 1. 默认行为:如果子没有在自己的构造函数中显式调用 super(...) 或 this(...),则编译器会自动添加对父类无参构造方法的调用(即 super())。 2. 显式调用:用户可以在子构造函数中显式添加 super() 来调用父类的无参构造方法。 3. 必要情况:如果父类没有无参构造方法,子必须显式调用父类的另一个构造方法(如有参构造),否则编译错误。 用户询问“继承父类无参构造方法的方法”—但严格来说,构造方法不是继承的;子只是调用它们。所以,我应该澄清概念。 结构化回答: - 解释继承机制:子继承构造方法,但通过调用父类构造方法来初始化。 - 针对无参构造: - 默认调用:如果不指定,则自动调用父类无参构造。 - 显式调用:使用 super()。 - 注意事项:如果父类没有无参构造,需要显式调用其他构造方法。 根据系统指令: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 生成相关问题。 - 在引用末尾添加引用标识。 引用来源:[^1], [^2], [^3], [^4], [^5]。 回答结构: 1. 简要概述。 2. 详细解释方式。 3. 代码示例(如果需要)。 4. 注意事项。 5. 生成相关问题。 代码示例:引用[1]和引用[5]有示例,我可以参考。 用户说的“继承父类无参构造方法的方法”—可能指的是如何在子中处理或调用父类的无参构造方法。 最终回答: - 方式:隐式或显式调用。 隐式:什么都不做,编译器自动添加 super()。 显式:在子构造函数中写上 super(); 例如: ```java public class Dog extends Animal { public Dog() { super(); // 显式调用父类无参构造方法 } } ``` 或者省略 super(),因为默认会调用。 但如果父类只有有参构造,必须显式调用 super(params)。 生成相关问题:基于主题,如“如果父类没有无参构造方法怎么办?”、“如何调用父类的有参构造方法?”等。 </think>### Java中子继承父类无参构造方法的方式 在Java中,子不会直接“继承父类的构造方法(包括无参构造方法),因为构造方法不能被继承。相反,子通过调用父类的构造方法来初始化从父类继承的字段和行为。针对父类的无参构造方法,子可以通过以下两种方式实现调用: 1. **隐式调用(默认行为)**: - 如果子的构造方法中没有显式使用 `super(...)` 调用父类的有参构造方法,也没有使用 `this(...)` 调用自身的其他构造方法,则编译器会自动在子构造方法的第一行插入 `super()`,以调用父类的无参构造方法。 - 这种情况下,用户无需编写任何代码,子的构造方法会默认初始化父类部分。 - 示例: ```java public class Animal { } // 父类有默认无参构造方法 public class Dog extends Animal { public Dog() { // 编译器自动添加 super(); 调用父类无参构造方法 } } ``` 在这个例子中,`Dog` 的无参构造方法隐式调用了 `Animal` 的无参构造方法[^3][^4]。 2. **显式调用(手动指定)**: - 用户可以在子构造方法的第一行显式使用 `super()` 来调用父类的无参构造方法。这种方式更清晰,尤其是在需要强调初始化逻辑时。 - 示例: ```java public class Animal { } // 父类有默认无参构造方法 public class Dog extends Animal { public Dog() { super(); // 显式调用父类无参构造方法 } } ``` 这里,`super()` 明确指定了调用父类的无参构造方法,但效果与隐式调用相同[^1][^2]。 #### 注意事项 - **父类必须有可访问的无参构造方法**:如果父类没有无参构造方法(例如,父类定义了有参构造方法但未显式提供无参构造方法),则编译器不会自动添加 `super()`。此时,子必须显式调用父类的其他构造方法(如 `super(参数)`),否则会导致编译错误[^2][^4]。 - **调用位置**:`super()` 必须位于子构造方法的第一行,否则编译器会报错[^2][^5]。 - **私有构造方法**:如果父类的无参构造方法是 `private` 的,子无法调用它,因为私有构造方法不被继承[^4]。 #### 总结 - **默认方式**:什么都不写,编译器自动处理(隐式调用)。 - **手动方式**:在子构造方法中显式添加 `super()`(显式调用)。 这种方式确保了父类的初始化优先于子的逻辑,符合Java继承机制[^3][^4][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值