深入浅析Java 抽象类和接口
前言
Java中,抽象类和接口是两个非常重要的概念。在开发中,使用它们可以实现面向对象编程的多态性、继承性和封装性等特性。本文将从以下几个方面深入浅析Java抽象类和接口,包括定义、应用场景、区别、示例等。
定义
抽象类
抽象类是在类前面加上关键字abstract,表示这个类不能被实例化,只能被继承。抽象类可以包含非抽象方法和抽象方法。其中,抽象方法必须被子类实现。
接口
接口是一种特殊的类,使用关键字interface来定义。接口中只包含抽象方法、默认方法和静态方法。与抽象类不同,接口中的方法都是抽象方法,必须被实现。
应用场景
抽象类
抽象类常用于对继承关系进行建模,用于定义一些抽象方法,以及一些具体方法。比如说,一个“动物”类可以定义一些通用的方法和属性,如“叫声”、“行动方式”,另外它还可以定义一些抽象的方法,如“进食”、“睡觉”等具体的实现则需要由子类去继承、重写,来实现。
接口
接口顾名思义,它的主要作用是提供一种规范。有些场景下我们不能确定具体的类应该如何实现一个方法,这时就可以定义一个接口去规范这个方法的定义和调用方式。比如说,Java中的List接口,即规定了添加、遍历、删除等一些基本操作方法,这些方法的实现方法是有List的各个具体实现类去实现、重写的。
区别
抽象类与接口的区别
- 抽象类可以包含非抽象方法和属性,而接口中只能包含抽象方法、默认方法和静态方法。
- 抽象类可以被继承,接口只能被实现。
- 子类继承抽象类时,可以选择性实现其中的抽象方法,而实现接口时,需要再当前类中实现所有方法。
- 抽象类和接口都不能被直接实例化。
示例
抽象类的示例
public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void eat();
}
//子类继承抽象类并实现抽象方法
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void eat() {
System.out.println("猫"+getName()+"正在吃鱼");
}
}
上面的示例中,定义了一个Animal抽象类和一个Cat子类。Animal类定义了一个抽象方法eat(),表示进食。Cat继承了Animal类并实现了其抽象方法eat()。这里演示了如何通过抽象类实现进食这一行为。
接口的示例
public interface Animal {
void eat();
void sleep();
}
//实现接口的类
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("猫在吃鱼");
}
@Override
public void sleep() {
System.out.println("猫在睡觉");
}
}
这个示例中,将Animal定义成一个接口,其中定义了两个方法eat()和sleep()。Cat实现了该接口,并覆盖了eat()和sleep()两个方法。这里演示了如何通过接口实现进食和睡觉这两种动作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入浅析Java 抽象类和接口 - Python技术站