------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();
//输出成员变量color
System.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();
//输出成员变量color
System.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)的值是:8
int_sum=add(3,5,6)的值是:14
double_sum=add(3.2,5.6)的值是:8.8