抽象类和接口是Java中两个抽象概念,都可以用来定义规范、约束子类的行为。本文将为您介绍Java中抽象类和接口的使用方法及其注意点。
抽象类
什么是抽象类?
抽象类是在类的声明中包含抽象方法的类,即含有abstract
关键字的类。抽象方法是一个没有具体实现的方法声明,它只声明了方法名、参数类型和返回值类型。抽象类一般用于定义规范和约束子类的行为,不能被实例化。
如何定义抽象类?
定义抽象类时,需要在类名前加上abstract
关键字,如下所示:
public abstract class AbstractClass {
//抽象方法
public abstract void printMessage();
}
如何继承抽象类?
继承抽象类时,必须实现其所有抽象方法,否则需将子类也声明为抽象类。如下所示:
public class SubAbstractClass extends AbstractClass {
//实现抽象方法
public void printMessage() {
System.out.println("Hello World!");
}
}
注意点
- 抽象类不能被实例化。
- 抽象类可以包含非抽象的方法和变量。
- 抽象方法必须被子类重写或子类也声明为抽象类。
接口
什么是接口?
接口是一种规范,它定义了一组方法和常量,并不能用来描述具体实现。接口中的方法默认为public abstrct
,而且不能包含变量。接口是用于实现多态的机制,因为Java是单继承的,但接口却可以实现多重继承。
如何定义接口?
定义接口时,需要使用interface
关键字,如下所示:
public interface MyInterface {
//定义方法
void methodA();
void methodB();
}
如何实现接口?
实现接口时,需要使用implements
关键字,如下所示:
public class MyClass implements MyInterface {
//实现接口中的方法
public void methodA() {
System.out.println("This is methodA.");
}
public void methodB() {
System.out.println("This is methodB.");
}
}
注意点
- 接口中的方法都是抽象方法,默认为
public abstract
。 - 一个类可以同时实现多个接口。
- 接口中不能包含变量,只能是
public static final
的常量。 - 接口中的方法必须在实现类中被重写。
示例代码
抽象类示例
public abstract class Shape {
String color;
public Shape(String color){
this.color = color;
}
public abstract double getArea();
public abstract String toString();
}
public class Rectangle extends Shape {
double length;
double width;
public Rectangle(double length, double width, String color){
super(color);
this.length = length;
this.width = width;
}
public double getArea() {
return length * width;
}
public String toString() {
return "Rectangle [length=" + length + ", width=" + width + ", color=" + color + "]";
}
}
public class Circle extends Shape {
double radius;
public Circle(double radius, String color){
super(color);
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
public String toString() {
return "Circle [radius=" + radius + ", color=" + color + "]";
}
}
接口示例
public interface Sellable {
int getPrice();
String getDescription();
}
public interface Transportable {
void setWeight(int weight);
int getWeight();
}
public class Product implements Sellable, Transportable {
int price;
int weight;
String name;
String description;
public Product(int price, int weight, String name, String description){
this.price = price;
this.weight = weight;
this.name = name;
this.description = description;
}
public int getPrice() {
return price;
}
public String getDescription() {
return description;
}
public void setWeight(int weight) {
this.weight = weight;
}
public int getWeight(){
return weight;
}
}
以上是Java中抽象类和接口的使用方法及注意点,希望能对您有所帮助。