1 面向对象的三大特性
面向对象是一种 “万物皆对象” 的编程思想,从业务中抽象出一个个类,类中包含属性和方法,相比直接实现函数功能的面向过程,更容易维护和扩展,有封装、继承、多态三大特性。
封装:将对象的属性私有化,对外只提供接口访问,从而隐藏内部实现,提高程序安全性。
继承:从已有类得到继承信息创建新类的过程,实现了代码的复用。
- 子类拥有父类所有属性和方法,但无法访问访问父类私有属性和方法;
- 子类可以拥有自己的属性和方法;
- 子类可以重写父类方法。
多态:分为编译时多态(重载)和运行时多态(重写)
- 重载:指同一个类中同名的方法有不同的参数列表,注意不能根据返回类型进行区分。
- 重写:发生在子类与父类之间,子类重写父类的方法具有相同的返回类型、更好的访问权限。
实现多态分两步,一是子类继承父类并重写父类的方法,二是用父类型引用子类型对象。
这样,同样的引用调用同样的方法,就会因为子类对象的不同而执行不同的操作。
2 重载和重写的区别
重载:编译时多态,指同一个类中同名的方法有不同的参数列表,注意不能根据返回类型进行区分。
重写:运行时多态,发生在子类与父类之间,子类重写父类的方法具有相同的返回类型、更好的访问权限。
3 抽象类和接口的区别
抽象类:不能实例化的类,用于重用代码。
-
可以定义构造函数;
-
成员权限可以是 public、protected、default;
public:所有类,protected:包内类及子类,default(默认):包内类,private:本类
-
方法可以有抽象方法和具体方法;(可以没有抽象方法)
接口:抽象方法的集合,用于定义 API 和分离实现。
- 不能实例化和定义构造函数;
- 方法默认是 public abstract,属性默认是 public static final;
- 方法只能是抽象方法;Java 8 后,开始有静态方法和默认实现;
Java 类库中定义了非常多接口,常见比如集合中的 Collection、Map。