Java基础之面向对象

一、什么是面向对象编程(OOP)

       面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种编程思想,它将对象作为问题解决问题的基本元素,利用对象和对象之间的相互作用来设计程序。

面向对象思想把整个世界看成由各种对象来组成的。这些对象具有属性和行为(方法)。


面向对象思考问题的方式

1、首先考虑在问题域中设计到的对象有哪些

2、其次考虑这些对象有怎样的特征和功能

3、最后考虑对象和对象之间的关系


面向对象的设计思想----示例

五子棋:

面向对象:整个五子棋可以分为1、黑白双方,这两方的行为是完全一样的2、棋盘系统,负责绘制画面3、规则系统,负责判定诸如犯规、输赢等。


面向对象实例:

package oop;

public class Student {
	String name;	//姓名属性(成员变量)
	int age;		//年龄属性
	double score;	//成绩属性
	
	public void study() {
		System.out.println("姓名为" + name + ",年龄为" + age + "的学生正在学习...");
	}
	
	public void exam() {
		System.out.println(name + "正在考试...");
	}
}
package oop;

public class StudentTest {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.name = "小明";
		stu.age = 20;
		stu.score = 89.5;
		stu.study();
		stu.exam();
	}
}

运行结果:

姓名为小明,年龄为20的学生正在学习...

小明正在考试...


二、类与对象

1、对象:用来描述客观事物的一个实体,由一组属性和行为构成

2、类:类是一个模板,它描述一类对象的行为和状态,是Java语言中最重要的“数据类型”


万物皆对象


对象的特征----属性

属性-对象具有的各种特征

比如有一个顾客对象,他有三个属性,分别是姓名(name)、年龄(age)和重量(weight)

行为-是对象执行的各种操作

比如有一个收银员对象,他有三种动作,分别是收银(cash)、打印账单(PrintBill)和刷卡(CreditCard),收银员的三个动作都是他的行为

对象的属性和行为:

列出小狗对象的属性和行为

属性:

颜色:白色(或者黄色等其他颜色)     品种:贵宾犬

行为:叫、跑、吃、睡


类是从对象中抽取出来的,比如说抽取出凯迪拉克、保时捷、玛莎拉蒂、在超市里买包的人、买酱油醋盐的人等等,以上解释对象,但我们可以从上面的对象中抽取出共同的特征及共同的属性和行为,一类是车类,另一类是顾客类

类是一个模板定义对象将会拥有的特征(属性)和行为(方法),类是对象的类型,但和int类型等不一样


类和对象的关系

类是抽象的概念,仅仅是模板,比如说:“人”

对象是一个你能够看的到、摸得着的具体实体也称为类的实例(instance)



三、类与对象的创建

定义类的语法:

[访问修饰符]  class  类名{

         //属性和方法的声明

}

eg:

public class Person {
	String name;//姓名
	boolean sex;//性别
	int age;	//年龄
	
	public void speak(String word) {//说话
		System.out.println(name + "说:" + word);
	}
	
	public void tread() {//行走
		System.out.println("四处游走...");
	}
}


类中成员变量的定义

1、定义成员变量的语法:

     [访问修饰符]  数据类型   成员变量名 [=初始值];

2、成员变量的类型可以使用Java语言中的任何一种数据类型(包括基本类型和引用类型)。

3、在定义成员变量时可以对其进行初始化。如果不对其进行初始化,Java会使用默认的值对其进行初始化。

4、成员变量的作用域是整个类体。


局部变量和成员变量



类中方法的定义

定义方法的语法:

[访问修饰符]   返回值类型   方法名(参数类型  参数名1,...){

         //方法的具体实现语句

}


对象的产生和使用

怎样根据设计好的类来创建一个对象?

       利用new关键字调用类的构造方法(类的一种特殊方法)就可创建该类的一个对象。

构造方法

1、构造方法的名字和类名相同,并且没有返回值,不要加void

 2、构造方法作用在于构造并初始化对象

3、每个类中都至少包含一个构造方法

两种构造方法

1、默认的构造方法

2、带参的构造方法


默认构造方法

1、默认构造方法就是指不带参数的构造方法。

2、Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个默认的无参构造方法

eg:

public class Person {
	String name;	//姓名
	char sex;	//性别
	int age;		//年龄
	
	public void tread() {//行走
		System.out.println("走走...");
	}
	
	public static void main(String[] args) {
		Person person = new Person();//用new调用该类的默认构造方法来创建一个对象 
		person.tread();
	}
}

3、如果类中有一个自己编写的构造方法时,编译器就不会为我们再提供那个默认的构造方法。

eg:

public class Person {
	String name;	//姓名
	char sex;		//性别
	int age;		//年龄
	
	public Person(String name, char sex, int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public void tread() {//行走
		System.out.println("随便走走...");
	}
	
	public static void main(String[] args) {
		Person person = new Person("小明",'男',21);//用new调用该类的已有构造方法来创建一个对象 
		person.tread();
	}
}

如果我们创建对象时,仍然使用默认的构造方法,则编译器会报错,我们必须使用自己编写的构造方法才可以通过编译。


四、方法重载

重载(Overloading)

public class Player{
    public void play(歌曲){ //演唱歌曲 }
    public void play(钢琴){ //弹奏钢琴 }
    public void play(剧本){ //根据剧本表演 }
}
方法重载:同一个类中,方法名相同,参数列表不同(参数类型不同、参数个数不同、参数顺序不同)


实例1:猫捉老鼠

package cat;

public class Cat {
	String color;
	public Cat() {
		
	}
	
	public Cat(String c) {
		color = c;
	}
	
	public void catchMouse(Mouse mouse) {
		System.out.println("一只" + color + "的猫抓住了" + mouse.color + "、" + mouse.size + "大的老鼠!");
	}
}
package cat;

public class Mouse {
	String color;
	double size;
	public Mouse() {
		
	}
	
	public Mouse(String c,double s) {
		color = c;
		size = s;
	}
}
package cat;

public class Test {
	public static void main(String[] args) {
		Mouse mouse = new Mouse("白颜色",12.5);
		Cat cat = new Cat("黑颜色");
		cat.catchMouse(mouse);
	}
}

运行结果:

一只黑颜色的猫抓住了白颜色、12.5大的老鼠!

实例2:在指定坐标点处画出规定的矩形

package draw;

/**
 * 坐标点类
 */
public class Point {
	double x;//x轴坐标
	double y;//y轴坐标
	public Point() {
		
	}
	
	public Point(double xPoint,double yPoint) {
		x = xPoint;
		y = yPoint;
	}
}
package draw;

/**
 * 矩形类
 */
public class Rectangle {
	double len;//矩形的长
	double width;//矩形的宽
	
	public Rectangle() {
		
	}
	
	public Rectangle(double l, double w) {
		len = l;
		width = w;
	}
}
package draw;

/**
 * 画图类
 */
public class Drawing {
	public static void drawRectange(Point point,Rectangle r) {
		System.out.println("在坐标为("+point.x+","+point.y+")处画一个长为"+r.len+"宽为"+r.width+"的矩形...");
	}
}
package draw;

public class Test {
	public static void main(String[] args) {
		Point p = new Point(3,1);
		Rectangle r = new Rectangle(5,6);
		Drawing.drawRectange(p, r);
	}
}

运行结果:

在坐标为(3.0,1.0)处画一个长为5.0宽为6.0的矩形...

实例3:方法重载实例

package overloading;

public class Person {
	String name;
	int age;
	char sex;
	
	public Person() {
		
	}

	public Person(String n, int a) {
		name = n;
		age = a;
	}
	
	public Person(String n, int a, char s) {
		name = n;
		age = a;
		sex = s;
	}
	
	public void say() {
		System.out.println("我叫" + name + ",今年" + age + "岁了,性别:" + sex);
	}
}
package overloading;

public class TestOverloading {
	public static void main(String[] args) {
		Person per = new Person();
		per.say();
		Person per2 = new Person("小青",20);
		per2.say();
		
		new Person("来福",52,'男').say();
	}
}

运行结果:

我叫null,今年0岁了,性别:
我叫小青,今年20岁了,性别:

我叫来福,今年52岁了,性别:男

由实例3的结果可知,当我们没有给成员变量赋初值时,Java虚拟机就会使用默认值对其初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值