目录
一.如何理解面向对象和java的三大特性
面向对象是一种程序设计思想,计算机程序的设计实质上就是将现实中的一些事物的特征抽离出来描述成一些计算机事件的过程,这种抽象的过程中,我们把具体的事物封装成一个一个的整体进行描述,使被描述的对象具备一些系统性、整体性的的行为和特征,我们把这种设计思想称为面向对象。java是纯粹的面向对象编程,在java领域里,一切皆为对象。java有三大特性,封装、继承和多态,封装(将一些类的属性和行为特征隐藏起来,提供公有的方法让外部访问)的好处是提高代码的内聚和降低了耦合,继承则是拓展了原有的基类(父类),使得超类(子类)继承了父类的方法和属性,增加了代码的复用性,多态则是建立在继承的基础上的,父类的引用可以指向不同的子类对象,在运行时表现出子类的行为特征,这样增强了代码的灵活性。
二.抽象类
1.概念
用abstract修饰的类叫抽象类,抽象类中不一定有抽象方法,有抽象方法的可能是抽象类或接口。
2.抽象类中可以有什么
一般类中的代码块。静态代码块、属性、方法、构造方法等等,特殊的是允许含有抽象方法、而且不能通过构造方法来直接new一个对象,需要通过子类继承来创建对象。
3.类关系
a.抽象类可以单继承自抽象类;
b.抽象类可以单继承自一个普通类(一般不会这么写);
c.普通类继承自抽象类时,需重写抽象类的抽象方法,如果不重写也可将普通类改成抽象类。
4.意义
因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。
三.接口
1.概念
可以理解为抽象类中的抽象,用interface关键字修饰,还是类结构。
2.接口中可以有什么
公有静态常量属性、公有抽象方法 jdk1.8以后含有default关键字修饰的具体方法。其他均不含有。
3.类关系
a.一般类通过implements单或多实现接口 并重写接口中抽象方法或将一般类变成抽象类;
b.抽象类通过implements单或多实现接口;
c.接口不可继承别的类,单接口间可单或多实现。
4.意义
更多是定义一种通信契约,定义一种规范。
四.抽象类和接口的相似和区别
1.相似性
a.接口和抽象类都不能被实例化,用于被其他类实现和继承。
b.接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
2.区别
a.接口(jdk1.8以前)里只能包含抽象方法,公有静态常量,而抽象类除了包含容许包含抽象类之外其他和普通类一样有代码块、静态代码块、构造方法等;
b.接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作;
c.一个类最多只能有一个直接父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足;
d.抽象类通常来描述事物、接口通常来定义规则。
五.内部类
1.概念
定义在类内部的类叫内部类。
2.分类
a.成员内部类:与属性、方法属于一个层次的类;
b.局部内部类:写在方法或块中的类,作为成员的内部结构,与临时的局部变量一个层次;
c.匿名内部类:匿名内部类又分为成员匿名内部类、局部匿名内部类;
d.静态内部类:成员静态内部类;
3详细介绍
可以参考网上的这篇博客 https://www.cnblogs.com/dolphin0520/p/3811445.html
六.闭包
本文如有不正之处,烦请大神指出。