黑马程序员—Java之面向对象

来源:互联网 发布:淄博seo推广优化 编辑:程序博客网 时间:2024/05/08 18:27

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

一、面向对象的概述

           面向对象思想是人类最自然的一种思考方式,它将所有预处理的问题抽象为对象,同时了解这些对象具有哪些相应的属性以及展示这些对象的行为,以解决这些对象面临的一些实际问题,这样就在程序开发中引入了面向对象设计的概念,面向对象实际实质上就是对现实世界的对象进行建模操作。

(1)对象

        对象是事物存在的实体,如人类、书桌、计算机、高楼大厦等。通常都会将对象划分为两部分,即动态部分与静态部分。静态部分就是不能动的部分,这部分被称为“属性”,任何对象都会具备自身属性,例如一个人,它包括了高矮、胖瘦、性别、年龄等属性。然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、微笑、说话、行走,这些是这个人具备的行为(动态部分)。

      例如:一只大雁要从北方飞往南方的实际问题,用面向对象的思想来解决这一实际问题。

      ①首先从这一问题中抽象出对象,这里抽象出的对象为大雁;

      ②识别这个对象的属性。对象具备的属性都是静态属性,例如大雁有一对翅膀、黑色的羽毛等;

      ③ 识别这个对象的动态行为,即这只大雁可以进行的动作,如飞行等,这些行为都是因为这个对象基于其属性而具有的动作;

      ④识别这些对象的属性和行为后,这个对象就被定义完成。

 

(2)类

       类就是同一类食物的统称,如果将现实世界中的一个事物抽象成对象,类就是这类对象的统称,如鸟类、家禽类、植物类等。类是一个独立的程序单位,是Java程序的基本组成单位。

Java中类的定义格式如下:

class <类名>{       类主体;}

 

      类主体包含了3个部分的内容:类属性、类方法和构造方法。

      ①类属性:用来描述类本身所抽象的事物;

      ② 类方法:用来描述这个被抽象出的事物可以做什么;

      ③构造方法:每个类都至少一个特殊的方法,并将其称为构造方法。

 

(3)对象属性的实例化

       在使用成员字段时,往往要先对对象属性进行实例化,使用new关键字实现对象属性的实例化,也可以使用构造方法对其进行实例化,具体如下:

class 类名2{类名1  对象名;类名2(){     //构造方法对象名  = new 类名1();  //new关键字,实现对象实例化}}

或者

类名对象名  = new 类名();  //直接使用在定义时实现实例化


二、面对对象的特点

       面对对象程序设计具有以下几个特点:

(1)封装

        封装是面向对象编程的核心思想,它指的是对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

        对一个雷或对象实现良好的封装,可以实现以下目的:

        ①隐藏类的实现细节;

        ② 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑;

        ③可进行数据检查,从而有利于保证对象信息的完整性

        ④便于修改,提高代码的可维护性

 

(2)继承

        在Java中,从现有类出发定义一个新类,称为新类继承了现有的类,其中被继承的现有类叫做超类或父类,由继承而得到的类称为子类。在Java中支持类的单继承和多层继承,但是不支持多重继承,即一个类只能继承一个类而不能继承多个类。

        实现继承的格式:  class 子类名 extends 父类名      //extends关键字,用来实现继承

        继承的实现语法:

class 父类名{//父类主体}class 子类名 extends 父类名{//子类主体}

 

示例:

class Bird{String color = "白色";String skin = "羽毛";}public class Pigeon extends Bird{public static void main(String[] args) {//实例化子类对象Pigeon pigeon = new Pigeon();//输出成员变量colorSystem.out.println(pigeon.color);}}

运行结果;

白色

         继承中的重写是指父子类之间的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法名与父类的方法名相同,那么子类就不能继承父类的方法,此时,称为子类的方法重写了父类的方法。

示例:

class Vehicle{//父类的属性方法String color = "red";int maxSpeed = 100;public void start(){System.out.println("车子被启动了");}}public class car extends Vehicle {public static void main(String[] args) {//重写父类的属性String color = "silver";int maxSpeed = 200;//实例一个car对象car c = new car();System.out.println("车的颜色是:"+ color);System.out.println("车的最高时速是:" + maxSpeed);}}

运行结果:

车的颜色是:silver车的最高时速是:200


(2)多态

        多态的本质是一个程序中同名的不同方法。在面向对象的程序中,多态可以表现在很多方面,例如可以通过子类对父类方法的覆盖实现多态,也可以通过一个类中方法的重载实现多态,还可以将子类的对象作为父类的对象实现多态。在Java语言中,通常使用方法的重载和重写实现类的多态性。

示例:

class Bird{String color = "白色";String skin = "羽毛";}public class Pigeon extends Bird{public static void main(String[] args) {//实例化子类对象Pigeon pigeon = new Pigeon();//输出成员变量colorSystem.out.println(pigeon.color);}}

运行结果:

白色

       方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或类型不同即可,在这种情况下,该方法就叫被重载了,这个过程称为方法的重载。与方法的重写不同,重载不是子类对父类同名方法的重新定义,而是类对自身已有的同名方法的重新定义。

示例:

public class MyJavaText {public static void main(String[] args) {int int_sum;double double_sum;//调用有两个参数的add()方法int_sum = add(3 , 5);System.out.println("int_sum=add(3,5)的值是:"+ int_sum);//调用有三个参数的add()方法int_sum = add(3,5,6);System.out.println("int_sum=add(3,5,6)的值是:"+ int_sum);//传入的数值为double类型        double_sum = add(3.2,5.6);        System.out.println("double_sum=add(3.2,5.6)的值是:"+ double_sum);}    private static  int add(int x,int y) {return x+y;}    private static  int add(int x,int y,int z) {return x+y+z;}    private static double add(double x,double y) {return x+y;}}


运行结果:

int_sum=add(3,5)的值是:8int_sum=add(3,5,6)的值是:14double_sum=add(3.2,5.6)的值是:8.8
0 0
原创粉丝点击