Java面向对象基础知识之抽象类和接口
在Java面向对象编程中,抽象类和接口是重要的概念。本攻略将详细讲解抽象类和接口的基础知识,包括定义、用法、区别等内容,并提供两个示例说明。
抽象类
定义
抽象类是一种特殊的类,它不能被实例化,只能被继承。它的主要作用是作为其他类的基类,可以定义一些共性的属性和方法,并留下一些抽象方法的定义,让子类去实现。抽象方法没有具体的实现,只有方法声明,它相当于一个占位符,表示子类必须实现这些方法。
定义抽象类的关键字是abstract。
public abstract class Animal {
protected String name;
protected int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public abstract void shout();
}
上面的代码定义了一个Animal类,它是抽象的,有两个属性name和age,还有一个抽象方法shout()。
用法
抽象类不能被实例化,只能被继承。如果一个类继承了抽象类,那么它必须实现抽象类中的所有抽象方法。
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
@Override
public void shout() {
System.out.println("汪汪汪!");
}
}
上面的代码定义了一个Dog类,它继承了Animal类,并实现了shout()方法。
示例
下面的例子展示了如何创建一个动物园,包含多种动物,并统计它们的总数和平均年龄。
public class Zoo {
private List<Animal> animals = new ArrayList<>();
public void addAnimal(Animal animal) {
animals.add(animal);
}
public int getTotalAnimals() {
return animals.size();
}
public double getAverageAge() {
double sum = 0;
for (Animal animal : animals) {
sum += animal.age;
}
return sum / animals.size();
}
}
上面的代码定义了一个Zoo类,它包含一个List
使用示例:
Zoo zoo = new Zoo();
zoo.addAnimal(new Dog("旺财", 5));
zoo.addAnimal(new Cat("咪咪", 3));
System.out.println("总动物数:" + zoo.getTotalAnimals());
System.out.println("平均年龄:" + zoo.getAverageAge());
接口
定义
接口是一种特殊的抽象类,它只定义了抽象方法和常量,没有具体的实现。接口中的方法默认时抽象的,方法体为空,常量默认是public static final的。接口是一种重要的面向对象编程方式,它可以用来实现多重继承。
定义接口的关键字是interface。
public interface Flyable {
void fly();
}
上面的代码定义了一个Flyable接口,它只有一个抽象方法fly()。
用法
接口和抽象类类似,不能被实例化,只能通过其他类来实现。如果一个类实现了接口,那么它必须实现接口中的所有抽象方法。
public class Bird implements Flyable {
@Override
public void fly() {
System.out.println("鸟飞行......");
}
}
上面的代码定义了一个Bird类,它实现了Flyable接口,并实现了fly()方法。
示例
下面的例子展示了如何创建一个飞行器,可以飞行和停止。
public class Airplane implements Flyable {
private boolean flying = false;
@Override
public void fly() {
if (!flying) {
System.out.println("飞机开始起飞......");
flying = true;
} else {
System.out.println("飞机已经在空中了!");
}
}
public void stop() {
if (flying) {
System.out.println("飞机开始降落......");
flying = false;
} else {
System.out.println("飞机已经停止!");
}
}
}
上面的代码定义了一个Airplane类,它实现了Flyable接口。通过fly()方法可以让飞机起飞,在起飞过程中,如果重复调用fly()方法,会提示飞机已经在空中了。通过stop()方法可以让飞机降落,在降落过程中,如果重复调用stop()方法,会提示飞机已经停止了。
使用示例:
Airplane airplane = new Airplane();
airplane.fly();
airplane.fly();
airplane.stop();
airplane.stop();
抽象类和接口的区别
抽象类和接口有一些相似之处,但也有不同之处。主要是以下几点:
- 抽象类可以定义属性和非抽象方法,但接口只能定义常量和抽象方法。
- 一个类只能继承一个抽象类,但一个类可以实现多个接口。
- 抽象类中的抽象方法可以有实现,而接口中的方法总是抽象的。
- 抽象类不能完全替代接口的使用,因为接口具有更高的灵活性。
总结
本攻略介绍了Java中抽象类和接口的基础知识,包括定义、用法、示例和区别等内容。学习抽象类和接口是Java面向对象编程的基础,掌握了这些知识,可以更好地设计和实现面向对象的程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面向对象基础知识之抽象类和接口 - Python技术站