黑马 程序员——Java基础---面向对象(上)

黑马程序员——Java基础---面向对象(上)

 

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

 

一.概述 

  面向对象就是相对面向过程而言的,两者都是一种思想,就看自己怎么想了,面向对象是基于面向过程的。就拿生活中的一个例子来说—>打的,面向过程的步骤是先拦住出租车,然后打开车门,最后坐上车,一步一步的执行,而面向过程是强调具有功能的出租车:出租车停止,出租车门打开,出租车座椅做人。感觉就是面向过程是自己在做,面向对象是指挥对象去做。

  面向对象的特点:

1. 是一种符合人们思考习惯的思想

2. 可以将复杂的事情简单化

3.角色从执行者转换成了指挥者

      面向对象有三大特征:封装、继承和多态。在Java的开发过程,其实就是不断的创建对象,使用对象,然后指挥对象做事情。

 

二.正文

1、类和对象

      类是面向对象的重要内容,我们可以把类当成一种自定义数据类型,可以使用类来定义变量,也就是说,所有类都是引用数据类型。

1.1 定义类

      类可以被认为是某一类事物的抽象概念,对象是某一类事物中的具体存在的实体,比如我们日常说的人就是类,而具体的某个人就可以看做是对象。定义类的简单语法如下:

[修饰符] class 类名

{

       零到多个成员变量。。。。。。

       零到多个构造器。。。。。。

       零到多个方法。。。。。。 

}

       其中修饰符可以是public、final和abstract,或者完全省略这三个修饰符,类名要求是一个合法的标识符,但是从程序的可读性来看,类名必须是一个或多个有意义的单词连接而成,并且每个单词的首字母大写,其他字母全小写,单词之间不要有任何分隔符。

      对定义一个类而言,可以包含三种最常见的成员:构造器、成员变量和方法,三个成员都可以定义零个到多个。下面是定义方法的格式:

[修饰符] 方法返回值类型 方法名(形参列表)

{

       零到多条可执行语句组成方法体

}

  修饰符:其中修饰符可以省略,也可以是public、protected、private、static、final和abstract,其中public、protected和private三个最多只能出现一个;abstract和final最多出现其中之一,它们可以与static组合来修饰方法。

      方法返回值:返回值类型可以是java允许的任何数据类型,如果声明了返回值类型,方法体中必须包含一个有效的return,如果没有,则必须使用void来声明返回值。

      方法名:方法名的命名规则通常是以英文中的动词开头。

  形参列表:用于定义该方法可以接受的参数,可以有零组和多组“参数类型 形参名”组合而成,多组参数之间用英文逗号隔开。

方法体中多条可执行语句从上到下依次执行。

构造器是一个特殊方法,格式如下:

[修饰符] 构造器名(形参列表)

{

       零到多条可执行语句组成方法体

}

      修饰符:修饰符可以省略,也可以是public、protected、private其中之一。

      构造器名:必须和类名相同。

      形参列表:和定义方法形参列表相同。  

      注意:构造器不能定义返回值类型,也不能使用void,如果定义了返回值,java会把它当成方法处理。

 

1.2 对象的产生和使用

      创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建该类的实例。比如:Person p = new Person();如果权限允许的话,就可以通过实例来调用定义的成员变量和方法。语法如下:实例 . 成员变量/方法。

 

2、隐藏和封装

      封装是把对象的的状态信息藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。对一个对象封装,可以实现以下目的:

1隐藏类里的实现细节。

2让使用者只能通过实现预定好的方法访问数据,从而可以在该方法中加入逻辑语句,提高程序的健壮性。

3 便于修改,提高了代码的可维护性。

4 可进行数据检查,保证对象信息的完整性。

下面是一个简单的例子:

public class book

{

//对属性的封装,一个人的姓名,年龄

private String name;

private int price;

  // 方法封装

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int getPrice() {

  return price;

  }

  public void setPrice(int price) {

  this.price = price;

  }

}

以上程序定义了一本书,它有名字和价格两个属性,用private封装后,只对外界提供了get和set方法,假如你不像对外界提供某项属性的话,例如price,你可以把getPrice方法取消掉 。

       注意:要实现良好的封装应注意到两方面:第一是将对象的成员变量和实现细节隐藏起来,不允许外部直接访问;第二就是把方法暴露出来,让方法来控制对成员变量的安全访问和操作。

 

3、类的继承

      Java中的继承具有单继承的特点,每个子类只有一个直接父类。继承是通过extends关键字来实现的,实现继承的类被称为子类,被继承的类称为父类,有的也称基类、超类。例如稻子继承谷物,稻子是谷物的子类,谷物是父类。具体的语法如下:

修饰符 class SubClass extends SuperClass

{

       //类定义部分

}

  下面是一段简单的代码:

class A{

       public run(){

              System.out.println("A");

       }

}

//B继承A

class B extends A{

       int num=0;

       public function(){

       System.out.println("B");

}

}

//建立测试类C

public class C{

public static void main(String aa[]){

       //new 一个对象B()

       B b = new B();

       b.run();

       b.function();

       }

}

上面代码先是创建A类,然后用B去继承A,,最后在测试类C中生成B的对象b,由于继承的关系,b就可以调用A的run方法了。

  继承的分类:继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。在实际应用中应尽量使用单继承。Java中的类只支持单继承, 而多继承的功能是通过接口interface来间接实现的。

  重写:子类继承了父类,它就成了一个特殊的父类。在子类当中就可以重写父类当中的方法,要求是方法名和形参列表相同,返回值类型比父类的返回值类型更小或相等,权限比父类的访问权限更大或相等。

  注意:子类的构造方法中默认有父类的无參构造方法;子类中可以使用super(形参列表)调用父类对应的构造方法。

 

4、 多态

  Java引用变量有两个类型:编译时类型和运行时类型。如果编译时类型和运行时类型不一致,就可能出现了所谓的多态。

1、多态的体现:

A 向上转型:子类对象赋值给父类对象引用。代码例子如下:

class  A

{

}

class  B  extends  A

{

}

A b =  new  B();

B 向下转型:将父类对象赋值给子类引用。代码例子如下:

class  A

{

}

class  B  extends  A

{

}

A b =  new  B();

B c = (B)b;

2、多态的前提

必须是类与类之间只有关系,要么继承或实现

通常还有一个前提,存在覆盖

3、多态的好处

多态的出现大大的提高了程序的扩展性

4、多态的弊端         

只能使用父类的引用访问父类的成员

      注意:向上转型后父类引用只能调用自己拥有的方法,不能调用子类特有方法,并且调用方法具体执行的是子类的方法体,但调用成员变量用的是父类自身的成员变量。

 

三.总结

  这篇博文从概念上介绍了什么是面向对象的思维,并介绍了怎么定义类和创建对象,重点介绍了面向对象的三个特征即封装、继承和多态的基本概念,以及一些注意事项。

posted @ 2015-03-17 23:17  山顶上的牛  阅读(142)  评论(0)    收藏  举报