什么是对象
1.对象是一个客观事物的实体,是一个类的实例。也是构成一个系统的基本单位。
2.对象由属性和方法等服务组成。
3.一个对象的生命周期包括三个阶段:生成、使用、消除。
面向对象的特征
封装、继承和多态
封装:面向对象的一个最基础的特性。封装性,指对对象的一些属性和方法细节进行隐藏,只对外开放公共访问方式。
封装的原则:将不需要对外提供的内容都隐藏(设置访问修饰符为“private”)起来。把属性都隐藏,仅提供公共方法对其访问,可以在访问方式中加入逻辑判断等语句。
继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的为父类,得到继承信息的类子类。
多态:允许不同子类型的对象对同一对象作出不同响应。通俗的说,就是同一对象的方法调用做了不同的事情。
多态性分为编译时的多态性和运行时的多态性。
运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:
1). 方法重写(子类继承父类并重写父类中已有的或抽象的方法)
2). 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)
什么是类
1.类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象的描述。
2.类由属性和方法两个主要部分组成。
3.java中的类包括两部分:类声明和类体。
多态的好处
1.可替换性:多态对已存在的代码具有可替换性。 |
2.可扩充性:增加新的子类不影响已存在的类的结构。 |
3.接口性:多态是通过超类提供的方法签名,为子类提供一个公共接口,让子类完善或者重写它来实现的。 |
4.灵活性:它在应用中体现了灵活多样的操作,提高了使用效率 |
5.简化性:多态可以简化对应用软件的代码编写和修改过程。尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要 |
代码中如何实现多态
1.接口实现 |
2.继承父类重写方法 |
3.同一类中进行方法重载 |
虚拟机是如何实现多态的
动态绑定技术,执行期间判断对象引用的实际类型,根据实际类型调用对应的方法
重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
1.重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;
2.重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。
构造器不能被继承,因此不能被重写,但可以被重载。
父类的静态方法不能被子类重写。重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名的静态方法,我们一般称之为隐藏,调用的方法为定义的类所有的静态方法。
接口的意义
1.规范;2.扩展;3.回调;4.安全。
抽象类的意义
1.为子类提供一个公共的类型
2.封装子类中重复定义的内容
3.定义抽象方法,子类虽然有不同的实现,但是定义是一致的
抽象类和接口的区别
含有 abstract 修饰符 class 即为抽象类,抽象类不能创建实际对象,含有抽象方法的抽象类必 须定义为 abstract class。
接口可以说成是一种特殊的抽象类,接口中的所有方法都必须是抽象的,接口中的方法定义默认为 public abstract 类型,接口中的成员产量类型默认为 public static final。
具体对比举例:
a. 抽象类可以有构造方法,接口中不能有构造方法。
b. 抽象类中可以有普通成员变量,接口中没有普通成员变量。
c. 抽象类中可以包含非抽象普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的方法。
d. 抽象类中的抽象方法的访问权限可以是 public、protected 和(默认类型,虽然 eclipse 不报错,但也不能用,默认类型子类不能继承),接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
e. 抽象类中可以包含静态方法,在 JDK1.8 之前接口中不能包含静态方法,JDK1.8 以后可以包含。
f. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问权限可以是任意的,但接口中定义的变量只能是 public static final 类型的,并且默认即为 public static final 类型。
g. 一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类,接口不可以实现接口,但可以继承接口,并且可以继承多个接口,用逗号隔开。
访问修饰符public,private,protected,以及不写(默认)时的区别
修饰符 | 当前类 | 同包 | 子类 | 其他包 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
简述面向对象的六原则和一法则
单一职责原则:一个类只做一个功能
开闭原则:一个类对扩展开放,对修改关闭
依赖倒转原则:面向接口编程
里氏替换原则:任何时候都可以使用子类型替换掉父类型
接口隔离原则:接口必须小而专,不能大而全
合成聚合复用原则:优先使用聚合和合成关系复用代码
迪米特法则:一个对象应当对其他对象有尽可能少的了解。
概括:
什么是类?
类是具有相同属性和方法的一组对象集合
什么是包?
包是放置不同分类程序的文件夹
什么是接口?
接口是一组成员声明方法的集合
什么是继承?
继承是一个类继承并拥有另一个类已存在的属性和方法
什么是对象?
对象是系统描述客观事物的一个实体
什么是多态?
多态是具有表现多种形态的能力特征