接口实现的方法默认是default的 抽象类实现的子类方法可以拥有多种修饰符,
时间: 2024-03-21 07:37:54 浏览: 61
抽象类和接口的区别
不完全正确,接口中的方法可以有两种类型的默认实现:默认方法(default method)和静态方法(static method),默认方法可以被实现类继承或重写,而静态方法只能在接口中调用。而抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类中可以包含抽象方法(abstract method),抽象方法没有具体实现,需要被子类实现或者子类继续声明为抽象方法。
抽象类和接口的主要区别在于:
1. 抽象类可以包含非抽象方法,而接口只能包含抽象方法和默认方法(default method)。
2. 类只能继承一个抽象类,但可以实现多个接口。
3. 抽象类的子类可以通过继承来实现抽象方法,而接口的实现类必须实现所有的抽象方法。
例如,我们可以定义一个`Shape`抽象类,里面有一个抽象方法`area()`和一个具体方法`getColor()`,然后我们可以定义`Rectangle`和`Circle`两个类来继承`Shape`抽象类,并分别实现`area()`方法。这样,我们就可以通过调用`area()`方法来计算不同形状的面积,这就是抽象类的应用。
```java
abstract class Shape {
private String color;
public Shape(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public abstract double area();
}
class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(String color, double length, double width) {
super(color);
this.length = length;
this.width = width;
}
@Override
public double area() {
return length * width;
}
}
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
public class Main {
public static void main(String[] args) {
Shape shape1 = new Rectangle("red", 2, 3);
Shape shape2 = new Circle("blue", 4);
System.out.println(shape1.getColor() + " rectangle's area is " + shape1.area()); // 输出:red rectangle's area is 6.0
System.out.println(shape2.getColor() + " circle's area is " + shape2.area()); // 输出:blue circle's area is 50.26548245743669
}
}
```
阅读全文