Java面向对象的总结
JAVA面向对象的总结
-
类和对象的分析:
-
构造方法和成员方法的区别:
-
方法重载与重写的区别:
-
什么是封装,为什么要封装?
-
什么是继承,为什么要继承?
-
Java继承需要注意的问题:
-
类的继承中构造方法的使用:
-
什么是多态,为什么要多态?
1.类和对象的分析:
什么是类,什么是对象?
类是一个模板,它描述了对象的行为和状态(如飞机,汽车,男孩,等) 而每一架具体的飞机,每一量具体的车,和每一个具体的人都是一个对象.
下图中男孩女孩为类,而具体的每个人为该类的对象:
对象:对象是一个类的实例(不是找女朋友),一个人是一个对象,一条狗,一辆车都是一个对象,他们有各自的状态和动作.(类中描述的)
2.构造方法和成员方法的区别:
成员方法是表示动作,行为的操作,而构造方法是在创建对象的时候使用的
-
构造方法与类名完全一致,构造方法没有返回值(连void都不可以),标识符类型必须为public,但是成员方法可以使用private,public,protect,static等修饰.
-
构造方法里面有一个super()去调用父类的构造方法,但是成员方法是没有的
-
每个类都有1或多个构造方法
-
构造方法不可以被子类所继承,但是成员方法可以
-
构造方法的调用是在new一个对象的时候创建的
-
构造方法在创建对象的时候自动调用,不需要显示的调用
3.方法重载与重写的区别:
-
方法的重写与重载的方法名都必须与原方法名相同
-
方法的重载的发生条件必须是在同一个类中,而方法的重写发生在子类中(子类重写父类中的方法)
-
方法的重载与返回值类型和限定符都没有关系,只和参数的列表和参数个数有关,但是方法的重写要求参数列表必须完全一致,返回值类型也必须完全一致.
-
子类重写父类的方法,访问限定符的范围只可以变大,不可以缩小
-
子类重写的是从父类中继承的方法,如果父类中方法为private,那么子类就不可以重写
4.什么是封装,为什么要封装?
封装是什么:
封装就是通过访问访问限定符(一般为private),限制实例变量只能本类自己访问,当外界想要访问本类的实例变量时,只能使用方法来访问.(将具体实现细节隐藏起来)
图中的Student就实现了封装,使用private限定符来限制了name和id的访问权限,当我们想要设置名字和id,或者得到名字和id时都要使用公有的方法来实现
注:对于一件事情的处理可能会有很多的步骤,但是中间的过程都是为后面的过程服务的,用户只需要直接使用最后的方法即可,那么前面的这些方法都将设置为private,用户访问的方法设置为public,这样就隐藏了实现的细节.
在上图中,学生对象不必关心get方法的钱是怎么算出来的,只需要调用自己的set方法就可以设置自己的金额.这就是一个隐藏了实现过程的一个例子.同时便于修改.
封装的优点是什么?
-
良好的封装能够减少耦合。
-
类内部的结构可以自由修改
-
可以对成员变量更加精准的控制
-
隐藏信息,实现细节
5.什么是继承,为什么要继承?
继承就是一个类使用另一个类的实例或方法
生活中的继承现象
父类:(基类,超类)
子类:(派生类)
-
子类可以继承父类非私有的属性和方法(可以重用代码,减少代码的冗余)
-
子类可以定义自己的属性和方法(对父类进行扩展)
在上图中
-
子类特有的属性和方法,必须声明为子类的类型才可以使用
在上图中,st1和st3声明的不是UnStudent对象类型,所以不可以访问子类新增的属性和方法,只有声明为子类的类型时才可以调用子类新增的属性和方法
-
子类可以重写覆盖父类的属性和方法
当子类重写父类的方法时,子类的方法将会覆盖父类的方法,所以当我们创建一个子类类型的对象时,无论声明为子类类型还是父类类型,都将会调用子类重写的方法和属性.
Java继承需要注意的问题:
Java是单继承,不支持多继承
注:除Object类以外,其他任何类都仅有一个直接父类
除Object类外,任何类都至少有一个或多个父类
注:每个类都是用Object作为超类.所有对象(包括数组)都实现了这个类的所有方法.
6.类的继承中构造方法的使用
-
父类的构造方法子类不会继承(只会调用)
-
当子类在创建对象时,会调用子类的构造方法,子类的构造方法的第一句是super(),调用父类的构造方法
解释:
当new一个C对象时,首先会调用C类的构造方法,然而C类的构造方法的第一句就是super(),super()会去调用它的直接父类B的构造方法,以此类推,B类构造方法中的super()又会调用它的直接父类A,A在调用Object类的构造方法,进行初始化与创建对象.
7.什么是多态,为什么要多态?
多态是同一个行为具有不同的表现形态的能力(对象多种形态的表现)
现实中,比如我们按下 F1 键这个动作:
- 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
- 如果当前在 Word 下弹出的就是 Word 帮助;
- 在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
其中F1相当于父类中的一个方法,Flash,Word,Windows相当于父类的三个子类,并且都重写了父类中F1的方法,同一个方法,不同的对象有不同的表现形式,这种同一个行为具有不同的表现形式的能力叫做多态.
-
由于继承和重写机制导致的多态----------动态多态
-
由于重载机制导致的多态-----------------静态多态
上图中,cat,dog,tiger都是创建的父类的引用,指向了子类的对象,首先在调用方法时,发现父类中有相应的方法,于是再去子类中查看是否有相应的方法,如果有直接调用子类重写的方法.
注:当使用多态调用方法时,首先会检查父类中是否有此方法,如果没有就会报编译错误,如果有再去调用子类同名的方法.
多态存在的三个必要条件:
-
继承
-
重写
-
父类的引用指向子类对象
多态的实现方式:
-
重写:子类通过重写父类的方法实现多态
-
接口:java中接口只有方法,没有具体的实现,需要实现接口的类重写接口中方法
-
抽象类和抽象方法:子类继承抽象类,必须重写抽象类中的所有抽象方法