黑马程序员--java面向对象的理解

来源:互联网 发布:aws s3 上传文件 js 编辑:程序博客网 时间:2024/05/09 10:15

------- android培训、java培训、期待与您交流! ----------

理解面向对象的思想,首先我们需要知道在理解面向对象时需要知道的几个名词:对象、类。

 

对象: 

对象是人们要进行研究的任何事物,从简单的一个小分子到复杂的汽车飞机都可以看做对象,只是有时对象要根据人们研究问题的需要来确定,对象不一定是具体的,有时也可以表示抽象的规则或计划。

 

类: 

   类在java中是具有相同或相似性质的对象的抽象体现形式。也就是说,类的实例化就是创建对象的过程类的实例就是对象。


示例:

class Car{String color = "红色";//描述车的颜色int num = 4;//描述轮胎数//车的行为void run(){System.out.println(color+"  "+num);}}class CarDemo {public static void main(String[] args) {//生产汽车,通过new操作完成。Car c = new Car();c.run();}}

面向对象与面向过程的区别

面向过程:是一种以“事件”为中心的编程思想。

面向对象:是一种以“事物(即对象)” 为中心的编程思想。

比如要写一个“斗地主”的程序,面向过程的思维可能是“斗地主”为一个件,每局开始时进行发牌,通过出不同的牌可以得到不同的结果;而面向对象的思维可能是要进行斗地主,必须要有三个人,人的对象,具有对牌进行操作的行为;每一张牌本身又是一个对象,具有大小和花色的属性;整副牌还可以是一个对象;整个斗地主这件事物也是一个对象。


面向对象的四大特征

一、继承

1、Java的继承是通过extends关键字来实现的,实现继承的类称为子类,被继承的类称为父类,也称为基类或超类。

2、Java中是单继承,一个子类只能有一个父类。

3、父类和子类的关系,是一种一般和特殊的关系。如:水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果。

4、关于继承的几点注意:

①父类有的,子类也有

②父类没有的,子类可以增加

③父类有的,子类可以改变

④构造方法不能被继承

⑤方法和属性可以被继承

⑥子类的构造方法隐式地调用父类的不带参数的构造方法

⑦当父类没有不带参数的构造方法时,子类需要使用super来显式地调用父类的构造方法,super指的是对父类的引用


二、多态

1、多态:用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象。

2、方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即"猫"is a"动物")。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。

3、在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同,这种现象称为类的多态。类的多态性体现在两方面:一是方法的重载上)包括成员方法和构造方法的重载;二是在继承过程中,方法的重写。多态性是面向对象的重要特征。方法重载和方法覆写实际上属于多态性的一种体现,真正的多态性还包括对象多态性的概念。

4、对象多态性主要是指子类和父类对象的相互转换关系。

a)向上类型转换:比如说将Cat类型转换为Animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。

b)向下类型转换:比如将Animal类型转换为Cat类型,即将父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。

 

三、抽象

 

1、抽象类:使用了abstract关键字所修饰的类叫做抽象类。抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例)。抽象方法:使用abstract关键字所修饰的方法叫做抽象方法。抽象方法需要定义在抽象类中。相对于抽象方法,之前所定义的方法叫做具体方法(有声明,有实现)。

2、如果一个类包含了抽象方法,那么这个类一定是抽象类。

3、如果某个类是抽象类,那么该类可以包含具体方法(有声明、有实现)。

4、如果一个类中包含了抽象方法,那么这个类一定要声明成abstract class,也就是说,该类一定是抽象类;反之,如果某个类是抽象类,那么该类既可以包含抽象方法,也可以包含具体方法。

5、无论何种情况,只要一个类是抽象类,那么这个类就无法实例化。

6、在子类继承父类(父类是个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法;否则,该子类需要声明成一个abstract class.

7、当使用abstract修饰类时,表明这个类只能被继承;当作用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写),而final修饰的类不能被继承,final修饰的方法不能被重写,因此final和abstract永远不能

 

四、接口 

1、Java接口中的成员变量默认都是public, static, final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

3、Java接口中只能包含public, static, final类型的成员变量和public,abstract类型的成员方法

4、接口中没有构造方法,不能被实例化

5、一个接口不能实现((implements)另一个接口,但它可以继承多个其它的接口

6、Java接口必须通过类来实现它的抽象方法:public class A implements B{...}

7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象的

8、不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9、一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.


------- android培训、java培训、期待与您交流! ----------
0 0
原创粉丝点击