一、抽象类
1.1 抽象类概念:
抽象类是一种不能够被实例化的类,它存在的目的是为了被子类继承和实现。抽象类可以包含抽象方法,但是不一定必须包含抽象方法。
JAVA代码示例:
public abstract class Animal {
public abstract void makeSound();
}
1.2 抽象类特点:
- 抽象类不能被实例化,必须被子类继承和实现。
- 抽象类可以包含抽象方法和非抽象方法。
- 抽象类可以有构造方法,但是不能被用来实例化抽象类。
- 如果一个类继承了一个抽象类,那么它必须实现抽象类中的所有抽象方法,或者继续声明为抽象类。
JAVA代码示例:
public abstract class Animal {
public void eat() {
System.out.println("Animal is eating");
}
public abstract void makeSound();
}
public class Dog extends Animal {
public void makeSound() {
System.out.println("Woof");
}
}
1.3 抽象类存在价值:
- 抽象类可以提供一个模板,让子类来实现具体的方法。
- 抽象类可以约束子类的行为,保证子类的一致性。
- 抽象类可以隐藏实现细节,提供更高的抽象层次。
二、接口
2.1 接口的概念:
接口是一种抽象类型,它描述了类或者对象可以做什么,而不是怎么做。接口定义了一组方法签名,但是没有提供方法的实现。
JAVA代码示例:
public interface Animal {
public void makeSound();
}
2.2 接口的特点:
- 接口中的方法都是抽象方法,不能包含实现。
- 接口中的字段都是常量,不能被修改。
- 接口不能被实例化,必须被类实现。
- 一个类可以实现多个接口。
- 接口中的方法默认为public,不能为private或protected。
JAVA代码示例:
public interface Animal {
public void makeSound();
}
public class Dog implements Animal {
public void makeSound() {
System.out.println("Woof");
}
}
2.3 接口存在价值:
- 接口可以实现多态,一个类可以实现多个接口。
- 接口可以约束类的行为,保证类的一致性。
- 接口可以隐藏实现细节,提供更高的抽象层次。
三、接口和抽象类的关系
3.1 接口和抽象类相同点:
- 接口和抽象类都不能被实例化,只能被子类或类实现。
- 接口和抽象类都可以约束子类或类的行为,保证子类或类的一致性。
- 接口和抽象类都可以隐藏实现细节,提供更高的抽象层次。
3.2 接口和抽象类的区别:
- 抽象类可以包含方法的实现,但是接口不能。
- 一个类只能继承一个抽象类,但是可以实现多个接口。
- 接口中的方法默认为public,不能为private或protected,而抽象类中的方法可以有不同的访问修饰符。
- 抽象类可以拥有构造方法,而接口不能。
扩展知识点:
- 接口的实现可以在运行时动态地改变,而抽象类的继承关系是在编译时静态确定的。
- 接口可以被用来定义事件、回调函数等,而抽象类则不太适合这种用法。
- 接口的设计应该是更加关注行为,而抽象类的设计则更加关注状态和行为的组合。
文章评论