黑马 程序员——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、多态的弊端
只能使用父类的引用访问父类的成员
注意:向上转型后父类引用只能调用自己拥有的方法,不能调用子类特有方法,并且调用方法具体执行的是子类的方法体,但调用成员变量用的是父类自身的成员变量。
三.总结
这篇博文从概念上介绍了什么是面向对象的思维,并介绍了怎么定义类和创建对象,重点介绍了面向对象的三个特征即封装、继承和多态的基本概念,以及一些注意事项。

浙公网安备 33010602011771号