java 是面向对象的编程语言
- 对象:对象是类的一个实例,有状态和行为。
- 类:类是一个模板,它描述一类对象的行为和状态。
初学时,在理解“对象”和“类”的关系时,如上面这种对“类”的定义,描述比较抽象,让人难以理解。
在翻阅一些教程后,我们可以用更通俗的理解,把“类”当做“分类”。比如在动物界,我们一般会分类“猫”、“狗”、“鱼”,这些都是我们定义出来的分类,我们定义的依据就是归为同一类动物都有类似的行为和属性。比如
- 猫:都会喵喵叫、都会抓老鼠、都喜欢吃鱼、喜欢...
- 狗:听力敏锐、天气热会吐舌头、会汪汪汪、忠诚、能看家,喜欢吃翔...
- 鱼:会游泳、生活在水里、能在水下呼吸...
学习理论的过程也需要实践,现在我们来尝试定义“狗”:
class Dog{
// Dog 类:狗
}
狗有一些公共的行为(方法),比如吃翔 ̄へ ̄
/**
* Dog 类:狗
*/
class Dog{
// 行为(方法):狗狗吃翔
void eat(){
System.out.println("某只狗喜欢吃翔...");
}
// 行为(方法):狗狗吠叫
void say(){
System.out.println("汪汪汪....(有一只狗在叫)");
}
}
还有一些不同的属性(状态),比如狗狗的名称、年龄、皮毛颜色
/**
* Dog 类:狗
*/
class Dog{
// 狗狗的名称
String name;
// 狗狗的年龄
int age;
// 狗狗的皮毛颜色
String color;
// 行为(方法):狗狗吃翔
void eat(){
System.out.println(this.name + "喜欢吃翔...");
}
// 行为(方法):狗狗吠叫
void say(){
System.out.println("汪汪汪....(" + this.name + "在叫)");
}
}
我们定义了一个“狗”的分类,我们知道它们都喜欢吃翔,会被主人取不同的名字、年龄大小不同、有不同的皮毛颜色,所以给狗定义的这些行为(方法)和属性(状态),但是现在,它是看不到、摸不着的,只有,是没有实体的。
假如现在你想要养一只宠物,你的朋友给推荐你养狗,并给你介绍了“狗”是一种什么动物,这样,你就知道了“狗”这个分类。but,别人给你描述了“狗”这个分类,你就真的拥有狗了嘛?
NO!现在的你,只是知道了狗的特征,get了新的知识,那接下来,你需要什么?
你需要的是一只:活的、会汪汪叫,名字叫“旺财”,吃了翔还会舔你脸的狗。这只狗是什么?
它就是分类“狗”的一个“真实个体”,就是“类”的一个“实例对象”。
那么,接下来我们就要实例化一只狗出来给你做宠物(实例化对象)
/**
* 商店
*/
public class Store {
// Store类 入口
public static void main(String[] args) {
// 假设,你进入了这个商店。发现:
// 商店里有一只名叫tom的狗狗,这只狗狗就是Dog类的实例化对象
Dog tom = new Dog("tom", 1, "土黄色"); // new 一个类,可以创造改类的实例化对象
System.out.println("商店有一只" + tom.getInfo());
tom.say();
tom.eat();
}
}
/**
* Dog 类:狗
*/
class Dog{
// 狗狗的名称
String name;
// 狗狗的年龄
int age;
// 狗狗的皮毛颜色
String color;
// 自定义函数:行为(方法)狗狗吃翔
void eat(){
System.out.println(this.name + "喜欢吃翔...");
}
// 自定义函数:行为(方法)狗狗吠叫
void say(){
System.out.println("汪汪汪....(" + this.name + "在叫)");
}
// 自定义函数:获取狗狗信息
String getInfo(){
String info;
info = "名叫" + this.name + "," + this.age + "岁," + this.color + "的狗狗。" ;
return info;
}
// 构造函数:用来new实例化对象
public Dog(String name, int age, String color){
this.name = name;
this.age = age;
this.color = color;
}
}
现在,我们将文件另存为 Store.java
,编译执行
瞧 ~ 现在,你就见到了一只真正的狗狗(
类的实例化对象
)。
我们假设一下,你一眼就相中了这只狗狗,你想把它买回家做你的宠物。但是别急,也许你想要了解它的更多信息,比如它的品种、性别、价格等等,这时,我们就可以来对Dog类做一些补充。
/**
* 商店
*/
public class Store {
// Store类 入口
public static void main(String[] args) {
// 假设,你进入了这个商店。发现:
// 商店里有一只名叫tom的狗狗,这只狗狗就是Dog类的实例化对象
Dog tom = new Dog("tom", 1, "土黄色","哈士奇","母狗",1888.88); // new 一个类,可以创造改类的实例化对象
System.out.println("商店有一只狗狗:【" + tom.name +"】");
tom.getInfo();
tom.say();
tom.getOwner();
// 假设你的名字是jim
tom.setOwner("jim");
}
}
/**
* Dog 类:狗
*/
class Dog{
// 狗狗的名称
String name;
// 狗狗的年龄
int age;
// 狗狗的皮毛颜色
String color;
// 狗狗的品种
String breed;
// 狗狗的性别
String sex;
// 狗狗的价格
Double price;
// 狗狗的主人
String owner;
// 自定义函数:行为(方法)狗狗吃翔
void eat(){
System.out.println(this.name + "喜欢吃翔...");
}
// 自定义函数:行为(方法)狗狗吠叫
void say(){
System.out.println("汪汪汪....(" + this.name + "在叫)");
}
// 自定义函数:获取狗狗信息
void getInfo(){
System.out.println("====== 【"+ this.name +"】信息 start ======");
System.out.println("狗名:"+this.name);
System.out.println("品种:"+this.breed);
System.out.println("性别:"+this.sex);
System.out.println("年龄:"+this.age + "岁");
System.out.println("毛色:"+this.color);
System.out.println("价格:"+this.price);
System.out.println("====== 【"+ this.name +"】信息 end ======");
}
// 改变狗狗的主人
void setOwner(String owner){
this.owner = owner;
System.out.println("狗狗的新主人【" + this.name + "】是" + this.owner);
}
// 获取狗狗的主人信息
void getOwner(){
String info;
if(this.owner != null && !this.owner.equals("")){
info = "狗狗【" + this.name + "】的主人是" + this.owner;
}else{
info = "狗狗【" + this.name + "】现在还没有主人";
}
System.out.println(info);
}
// 构造函数:用来new实例化对象
public Dog(String name, int age, String color,String breed,String sex,Double price){
this.name = name;
this.age = age;
this.color = color;
this.breed = breed;
this.sex = sex;
this.price = price;
}
}
重新编译后执行
恭喜!现在你拥有了一只宠物狗狗,她的名字叫tom
。
不过,家(yi)财(pin)万(ru)贯(xi)的你,只养一只宠物怎么对得起你的身价?so ~ 你决定多养几只(实例化多个对象
)
/**
* 商店
*/
public class Store {
// Store类 入口
public static void main(String[] args) {
// 假设你的名字是jim
String you = "jim";
// 你进入了这个商店,发现:
// 商店里有一只名叫tom的狗狗,这只狗狗就是Dog类的实例化对象
Dog tom = new Dog("tom", 1, "土黄色","哈士奇","母狗",1888.88); // new 一个类,可以创造改类的实例化对象
System.out.println("商店有一只狗狗:【" + tom.name +"】");
tom.getInfo();
tom.say();
tom.getOwner();
tom.setOwner(you);
//还有第二只狗狗
Dog ali = new Dog("ali", 2, "纯白色", "贵宾犬", "公狗", 8888.00);
System.out.println("商店还有一只狗狗:【" + ali.name +"】");
ali.getInfo();
ali.eat();
ali.getOwner();
ali.setOwner(you);
}
}