详解JavaSE中抽象类与接口的定义及使用
抽象类与接口基本概念
为了让Java中的面向对象编程更加灵活、强大,Java也提供了抽象类和接口两种机制。
抽象类
抽象类是用abstract关键字来定义的类。抽象类本身不能被实例化,只能从它派生非抽象的子类。
抽象类中定义了一些抽象方法,在子类中必须被实现。子类也可以覆盖非抽象的方法以添加特定行为。
接口
接口是使用interface关键字定义的一组抽象方法和常量。接口可以包含:
- 抽象方法:类似抽象类的抽象方法,需要实现。
- 默认方法:默认实现的方法,不需要在子类中实现。
- 静态方法:为接口提供单一入口的方法,不需要在子类中实现。
- 常量:接口中常量的值在定义时就被给定,并在编译时就固定下来。
抽象类与接口的使用
抽象类与接口的使用方式都类似,但是它们的适用场合有所不同。推荐使用以下的几个原则:
- 如果多个类具有共性,应该使用抽象类实现。
- 如果类需要实现多个不同的角色,就应该使用接口。
使用抽象类
使用抽象类通常需要遵循以下步骤:
- 定义一个抽象类来归纳具有共性的类的共有行为。
- 在抽象类中定义一个或多个抽象方法。
- 让具有这些共性的类派生自己的抽象类,并实现这些抽象方法或覆盖这些方法。
- 在具有共性的类中通过访问抽象类来获得这个功能。
以下是一个简单的抽象类示例:
abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void bark();
}
class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void bark() {
System.out.println("Woof!");
}
}
class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void bark() {
System.out.println("Meow!");
}
}
在这个示例中,定义了一个抽象类Animal,其中包含一个抽象方法bark()。然后通过Dog类和Cat类继承Animal类并实现bark()方法。
使用接口
使用接口通常需要遵循以下步骤:
- 定义一个接口来标识类可以实现的某些行为。
- 在接口中定义一个或多个抽象方法,以表示想要这个行为的类的功能。
- 让实现这个接口的类来实现这些方法。
- 通过访问接口来获得这个功能。
以下是一个简单的接口示例:
interface Shape {
double calculateArea();
double calculatePerimeter();
}
class Square implements Shape {
private double length;
public Square(double length) {
this.length = length;
}
public double calculateArea() {
return length * length;
}
@Override
public double calculatePerimeter() {
return 4 * length;
}
}
class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double calculateArea() {
return Math.PI * radius * radius;
}
@Override
public double calculatePerimeter() {
return 2 * Math.PI * radius;
}
}
在这个示例中,定义了一个接口Shape,其中包含两个抽象方法calculateArea()和calculatePerimeter()。然后通过Square类和Circle类来实现Shape接口,并实现这两个方法。
这两个示例说明了抽象类和接口的定义及使用方式,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JavaSE中抽象类与接口的定义及使用 - Python技术站