在Java编程中,理解和掌握**extends
、super
和reflection(反射)
**是非常重要的概念。这些机制不仅帮助我们实现代码的复用,还为程序的灵活性和扩展性提供了强大的支持。
extends
:继承与超类在Java中,class
或interface
可以通过extends
关键字来继承父类(super class)或者父接口(super interface)。这种机制允许我们将代码复用,并扩展现有类的功能。
extends
的语法基本语法如下:
class ClassName extends SuperClassName {
// 类体
}
ClassName
:子类或子接口的名称。SuperClassName
:父类或父接口的名称。示例1:继承一个简单的父类
public class Parent { // 父类
public void talk() {
System.out.println("Parent talk");
}
}
public class Child extends Parent { // 子类
public void talk() {
System.out.println("Child talk");
}
}
在上述代码中,Child
类通过extends Parent
继承了父类Parent
的所有属性和方法。
示例2:继承一个接口
interface Base { // 父接口
void method();
}
public class Child extends Object implements Base { // 子类同时实现接口
@Override
void myMethod() {
System.out.println("Child's method");
}
}
Child
类既继承了Object
的属性,又实现了父接口Base
中的方法。
extends
的作用与意义super
:调用基类构造函数在Java中,super
关键字用于调用父类(或基类)的构造函数。它是一个特殊的保留字,必须大写。
super
的语法基本语法如下:
void super(int i); // 调用基类构造函数
super()
。示例1:显式调用基类构造函数
public class Child extends Parent { // 子类
public Child() {
super(); // 调用父类的构造函数
System.out.println("Child object created");
}
public void talk() {
System.out.println("Child's talk");
}
}
在上述代码中,子类Child
的构造函数调用了基类Parent
的构造函数。
示例2:隐式调用
public class Child extends Parent { // 子类
public Child() {
System.out.println("Child object created");
}
public void talk() {
System.out.println("Child's talk");
}
}
如果没有显式地使用super()
,则默认调用父类的构造函数(除非基类或父类本身没有定义构造函数)。
super
的作用与意义super()
进行处理。泛型是一种编程范式,允许程序在不固定类型的情况下进行操作。它使代码更加灵活和抽象,可以避免重复编写相同逻辑。
示例1:定义一个泛型类
public class List<T> { // 泛型参数T代表元素的类型
public T get(int index) {
return elements[index];
}
}
List<String> stringList = new ArrayList<>(); // 创建一个字符串列表
stringList.add("Hello");
System.out.println(stringList.get(0)); // 输出 "Hello"
在上述代码中,List
是泛型类,T
表示元素的类型。通过定义get(int)
方法,并在实例化时传入具体类型(如String
),实现了动态数据处理。
示例2:使用泛型接口
import java.util.List;
public class Program {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>(args);
// 检查是否为空
if (stringList.isEmpty()) {
System.out.println("No strings");
} else {
String firstString = stringList.get(0);
System.out.println(firstString);
}
}
}
这里,List
表示一个包含字符串类型的列表。通过泛型接口实现了对不同类型的元素进行操作。
instanceof
关键字instanceof
?instanceof
关键字用于判断一个对象是否属于某个类或接口。它返回布尔类型的布尔值。
instanceof
的语法基本语法如下:
boolean result = (Object o) instanceof Class<?>; // 判断o是否是Class的实例
Class>
是一个类型参数,表示目标类。o
的实际类型属于该类或其子类,则返回true
。示例1:判断具体类型
public class Test {
public static void main(String[] args) {
Object obj = new Integer(); // 实例化整数对象
if ((obj instanceof Integer)) {
System.out.println("obj is an instance of Integer");
} else {
System.out.println("Not an Integer");
}
}
}
在上述代码中,instanceof
判断了obj
是否是Integer
类的实例。
示例2:继承关系
public class Test {
public static void main(String[] args) {
Object obj = new MySubclass(); // 实例化子类
if ((obj instanceof MyClass)) {
System.out.println("MySubclass extends MyClass");
} else {
System.out.println("Not a subclass of MyClass");
}
}
}
public class MyClass { // 基类
public abstract void myMethod();
}
public class MySubclass extends MyClass { // 子类
@Override
public void myMethod() {
System.out.println("MySubclass's method");
}
}
这里,instanceof
判断了obj
是否是MyClass
的实例,结果为真。
instanceof
的作用与意义通过本次学习,我们掌握了以下知识点:
extends
用于继承父类的属性和方法,减少重复编码。super()
用于调用父类的构造函数或初始化逻辑。instanceof
关键字用于判断对象的具体类型。这些知识点在Java编程中非常基础