Java面向对象之抽象类与接口
什么是抽象类?
抽象类是一种特殊的类,它不能被实例化,只能被继承。
定义抽象类
抽象类的定义方式为,在class
前加上abstract
关键字。
下面是一个定义抽象类的示例代码:
abstract class Animal {
public abstract void move();
}
其中,Animal
是一个抽象类,而move
方法是一个抽象方法,因为它没有方法体,只有方法声明。
抽象类的特点
- 抽象类不能被实例化。
- 抽象类可以被继承,但是继承了抽象类的子类,必须实现抽象类中的所有抽象方法。
- 抽象类可以有非抽象方法和非抽象成员变量。
抽象类的应用场景
- 在父类中只定义抽象方法,具体实现在子类中实现。
- 定义一个模板类,规范子类的实现方式。
什么是接口?
接口是一种抽象类型,是一组方法的集合,这些方法都是抽象的,没有具体的实现。
定义接口
定义接口时,需要在interface
前加上interface
关键字。
下面是一个定义接口的示例代码:
interface Moveable {
public void move();
}
接口的特点
- 接口中所有方法都是抽象方法,没有方法体。
- 接口中只能定义常量和抽象方法。
- 实现接口的类,必须实现接口中的所有方法。
接口的应用场景
- 当需要不同的类实现同一套方法时,可以使用接口。
- 当需要以一种标准的方式定义方法,但是不需要定义实现细节时,也可以使用接口。
抽象类与接口的区别
相同点:
- 都不能被实例化。
- 都可以被继承。
不同点:
- 抽象类中可以有具体的方法实现,而接口中所有方法都是抽象方法,没有具体实现。
- 在继承抽象类时,子类只能继承一个抽象类,但是可以实现多个接口。
- 抽象类和接口在用途和设计概念上是有区别的。接口是用来表示一个类需要实现的协议,而抽象类是用来表示类的本质。
示例说明
例子一:抽象类
下面是一个描述动物行为的抽象类:
abstract class Animal {
public abstract void move();
public void sound() {
System.out.println("Making some noise!");
}
}
Animal
类定义了move()
和sound()
方法。其中,move()
方法是一个抽象方法,没有方法体,需要在其子类中实现;sound()
方法则是一个具体方法,有具体的实现。
假设我们现在要描述狗的行为,可以定义一个继承Animal
类的Dog
类:
class Dog extends Animal {
@Override
public void move() {
System.out.println("Dog is walking...");
}
}
Dog
类实现了move()
方法,为狗的行为添加了具体的实现。
例子二:接口
下面是一个描述可移动物体行为的接口:
interface Moveable {
public void move();
public void stop();
}
Moveable
接口定义了move()
和stop()
方法。
假设我们现在要描述一辆汽车的行为,可以定义一个实现Moveable
接口的Car
类:
class Car implements Moveable {
@Override
public void move() {
System.out.println("Car is moving...");
}
@Override
public void stop() {
System.out.println("Car stopped!");
}
}
Car
类实现了Moveable
接口中的两个方法,为汽车的行为添加了具体的实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面向对象之抽象类,接口的那些事 - Python技术站