本文是观看翁恺老师《面向对象程序设计Java》时所做
视频来源-中国大学Mooc网
@TOC
之前我们学习了如何使用系统提供的类,比如String,来创建对象和使用对象。
尤其重要的是我们理解了对象变量和普通变量的不同,对象变量是对象的管理者而非所有者,所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。
现在,我们要来尝试自己定义类,然后用自己定义的类来创建对象。
我们从一个已有的程序开始,看看如何用这个程序中定义好了的类来创建多个对象。这个程序是一个图形用户界面的程序,会显示一个图形窗口,在其中画图。图上的每一个形状,都是一个对象。
我们希望通过对这个程序的尝试,让你充分理解类和对象的关系:类定义了对象长什么样,对象则是按照类的定义所制造出来的实体,一个类可以创建很多对象,每个对象有自己的数据。
对象与类
对象 = 属性 + 服务
MyPic.java
package shapes;
public class MyPic {
public static void main(String[] args)
{
Picture pic = new Picture(420,300);
Circle c1 = new Circle(320,40,80);
Rectangle r1 = new Rectangle(100, 100, 100, 100);
Triangle t1 = new Triangle(100, 100, 200, 100, 150, 50);
Line l1 = new Line(0,205,400,205);
Circle c2 = new Circle(200,200,50);
pic.add(c1);
pic.add(r1);
pic.add(t1);
pic.add(l1);
pic.add(c2);
pic.draw();
}
}
一个类由==两种==东西组成:表示对象有什么的==成员变量==和表示对象能做什么的==成员函数==。
一旦定义了类,我们就可以创建这个类的多个对象,这些对象都会做那个类所定义的动作(函数),但是各自具有不同的数据。
自动售货机:
VendingMachine.java
import java.awt.image.BandCombineOp;
import javax.swing.text.TabableView;
public class VendingMachine {
int price = 80;
int balance;
int total;
VendingMachine ()
{
;
}
void showPrompt()
{
System.out.println("welcome!");
}
void insertMoney(int amount)
{
balance = balance + amount;
showBalance();
}
void showBalance()
{
System.out.println(balance);
}
void getFood()
{
if(balance>price)
{
System.out.println("Here you are");
balance = balance - price;
total = total + price;
}
}
public static void main(String[] args) {
// TODO
VendingMachine vm = new VendingMachine();
vm.showPrompt();
vm.showBalance();
vm.insertMoney(100);
vm.getFood();
vm.showBalance();
VendingMachine vm1 = new VendingMachine();
vm1.insertMoney(200);
vm.showBalance();
vm1.showBalance();
}
}
这里的关键是理解类的定义和对象的关系,理解对象中的成员变量是怎么来的,怎么就能让成员函数明白自己在和哪个对象打交道。
这件事情,很多初学者是不明白的,而且是根本不去想这里有这么个事儿的。但是一旦想进去了而又没想明白,会很可怕的。
在没有引入类之前,变量是跟着代码走的。代码写到哪儿,变量写在哪里,那么运行的时候变量就在那儿。现在,写在类里的成员变量,只是一个声明,变量并不在那里,变量不在类里,变量在每一个对象里。
建议你一定要跟着视频中的方法自己用调试的方法看几遍成员函数的执行,做各种尝试,一定要正确而且充分地理解这里的关系。
this是成员函数的一个特殊的固有的本地变量,它表达了调用这个函数的那个对象
变量的初始化是程序安全很重要的一环。一旦创建了一个对象,有什么手段可以保证其中的每一个成员变量都有确定的初始值呢?
Java提供了多种手段来保障对象创建时的初始化,包括给每个成员变量默认的“0”值、定义初始化和构造函数。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。