Java面试题冲刺第十七天--基础篇3
在第十七天的基础篇3中,主要讲解了Java中的接口和泛型,下面将从概念、用法和示例三个方面对这两个知识点进行详细讲解。
接口
概念
接口是一种特殊的抽象类,其中的所有方法默认都是抽象的,不能包含具体实现。接口可以被多个类实现,通过接口可以实现类与类之间的松耦合。
用法
在Java中,使用interface关键字来定义接口,如下所示:
public interface InterfaceName {
// 定义方法
}
接口可以包含以下成员:
-
常量
在接口中定义的常量默认为public static final类型。 -
抽象方法
在接口中定义的方法默认为public abstract类型。
应用示例:
public interface Animal {
public static final int AGE = 10;
public abstract void eat();
}
示例说明1
定义一个接口Person,其中包含两个常量和两个抽象方法:
public interface Person {
int AGE = 20;
String NAME = "Tom";
void sayHello();
void eat(String food);
}
其中,AGE和NAME为常量,sayHello和eat为抽象方法。
定义一个类Student来实现Person接口中的方法:
public class Student implements Person {
@Override
public void sayHello() {
System.out.println("Hello, my name is " + NAME + ", and my age is " + AGE);
}
@Override
public void eat(String food) {
System.out.println("I am eating " + food);
}
}
在实现类中需要重写接口中的所有抽象方法,并且可以使用接口中的常量。
泛型
概念
泛型是Java 5引入的一种编程范型,用于编写通用代码。它使得代码更加简洁、安全,让程序设计者能够专注于业务逻辑,而不是细节。
用法
在Java中,使用<>符号来声明泛型类型,如下所示:
public class ClassName<T> {
// 泛型类型为 T
private T data;
// getter 和 setter 方法
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
上面的代码中,ClassName类中的data属性和setData()、getData()方法中的T类型就是泛型类型。
应用示例:
定义一个泛型类ArrayList,实现将数据添加到列表、获取列表长度和获取列表中某个位置的数据:
public class ArrayList<T> {
private Object[] elementData;
private int size;
public ArrayList() {
elementData = new Object[4];
}
public void add(T element) {
ensureCapacity(size + 1);
elementData[size++] = element;
}
public int size() {
return size;
}
public T get(int index) {
if (index < size) {
return (T) elementData[index];
}
return null;
}
private void ensureCapacity(int minCapacity) {
if (minCapacity > elementData.length) {
Object[] oldData = elementData;
int newCapacity = oldData.length * 2;
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
}
}
}
在ArrayList
示例说明2
在ArrayList类中添加一个remove()方法,用于从列表中删除某个位置的数据:
public void remove(int index) {
if (index < 0 || index >= size) {
return;
}
for (int i = index; i < size - 1; i++) {
elementData[i] = elementData[i + 1];
}
elementData[--size] = null;
}
通过循环遍历的方式,将后面的数据向前移动。最后将size减1,并将最后一个元素设为null。这样就可以从列表中删除某个位置的数据了。
结语
通过对Java中接口和泛型两个知识点的详细讲解,相信读者已经掌握了Java中这两个知识点的用法和应用场景。在使用Java编程时,一定要善于使用接口和泛型,以提高代码的可读性、健壮性和灵活性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面试题冲刺第十七天–基础篇3 - Python技术站