面向对象就是将所有的事和物都进行归类,抽象。但是在计算机编程中,有时候是用计算机来捕获一些动作,或者用计算机来做一些动作。那么这么动作也要进行归类,形成一个动作类,那么动作的实现就是这个类的里面的某个方法,用方法来实现动作。
面向对象有三个特性
1.封装:
封装就是定义java类中将控制域(Field)和方法被外部访问的权限,有4中 public private protected default 在文章(http://blog.csdn.net/lixujunk/article/details/39931267)有做用法解释,目的就是为了保护某些作用域不被随便修改,另外一个作用是隐藏类的细节。一般是隐藏类的域,将方法暴露出来,利用方法控对这些域进行访问和操作。
2.继承:
继承用关键字 extends 子类将继承父类的所有的非private和default 类型的域和方法
在java中有子类继承父类,子接口继承父接口,
java是单继承的模式,C++是多继承的模式,java的子类只能有一个父类,为了弥补多个没有办法多继承的优点,便使用接口的方式,java一个类可以实现多个接口,当然 接口的好处不只是为了这个,还有就是java的面向接口编程。
1.多态:
多态就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
JAVA引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态。
举个例子;上图中 Sub 为子类 ,Base 为父类,箭头为继承关系
public static void main(String[] args){
Base base = new Base();
base.test(); //运行 ① 中的test方法
Sub sub = new Sub();
sub.test(); //运行 ② 中的test方法
Base b_s=new Sub();
b_s.test(); //运行 ② 中的test方法
}
Base b_s=new Sub();这句代码中对象b_s编译时的类型是Base,但运行时的类型是Sub,运行时的类型是后期绑定的,绑定时子类的方法覆盖父类的方法(static和final 方法除外,private也是属于final方法的)。也就出现了多态的现象。
多态成立的3个条件是a 继承 b 重写父类的方法 c 父类引用指向子类对象