什么是对象呢?
简单来说我们自己就是一个对象,一人。
一个苹果,一条小鱼,一匹马儿,都是一个对象
对象呢又有自己的特征 比如我们自己,有眼睛 姓名,这些就称为属性
对象又有自己的行为 比如我们自己,有吃饭的行为,讲话的行为,这些就称为方法
说了对象怎么能不回顾一下类:
人有男人女人老人儿童,猪有野猪和家猪,但他们都属于人和猪这两个类
讲到对象呢不得不回顾一下面向对象
面向对象是干嘛的?有啥子用?
这就要联想一下计算机出现的目的了:
用计算机语言描述现实世界
用计算机解决现实中的问题
而面向对向呢就是用帮助开发人员的:
1.交流更加流畅
2.提高设计和开发效率
3.符合人类的思维习惯
4.提高设计和开发的效率
接着回来看如何用计算机语言描述一个对象所属的类以及它的属性和方法
类的表示
属性的表示
方法的表示
代码表示:
狗类
public class Dog {//狗的类名(Dog)
狗的属性如下
String name="小哈"; //昵称
int health = 60; //健康值
int love = 20; //亲密度
String strain = "哈士奇"; //品种
/**
* 狗的方法
*/
public void print(){
System.out.println(String.format("宠物的自白:\n我的名字叫%s,健康值是%d,和主人的亲密度是%d,我是一只%s",this.name,this.health,this.love,this.strain));
}
}
===========
//创建狗狗对象
Dog dog = new Dog();
dog.name=name;
dog.strain=strain;
dog.print();//调用狗的方法
这里注意一个关键字和修饰符:
static关键字
static可以修饰:变量,方法,代码块
static修饰的变量可以使用类名直接调用
static修饰的代码块自动加载,并且在第一行输出
代码示例:
/**
* 宠物企鹅类,使用静态常量。
*/
public class Penguin {
String name = "无名氏"; // 昵称
int health = 100; // 健康值
int love = 0; // 亲密度
static final String SEX_MALE ="Q仔";
static final String SEX_FEMALE="Q妹";
//static final String SEX_MALE = "雄";
//static final String SEX_FEMALE = "雌";
String sex = SEX_MALE; // 性别
/**
* 输出企鹅的信息。
*/
public void print() {
System.out.println("宠物的自白:\n我的名字叫" + this.name
+ ",健康值是" + this.health + ",和主人的亲密度是"
+ this.love + ",性别是 " + this.sex + "。");
}
}
测试类===========
public class Test {
public static void main(String[] args) {
Penguin pgn = null;
pgn = new Penguin();
System.out.println("第一个企鹅的性别是" + pgn.sex + "。");
pgn = new Penguin();
pgn.sex = Penguin.SEX_FEMALE;
System.out.println("第二个企鹅的性别是" + pgn.sex + "。");
pgn = new Penguin();
pgn.sex = Penguin.SEX_MALE;
System.out.println("第三个企鹅的性别是" + pgn.sex + "。");
}
}
final修饰符
final修饰变量,变量便常量
final修饰方法,方法不能被重写
final修饰类,类不能被继承
构造方法与方法的重载
构造方法:
- 方法名和类名相同,
- 与访问修饰符和返回值类型无关
- 分为有参构造和无参构造
- 作用:可以给声明的属性赋值
- 在没有声明构造方法的情况下,系统默认提供一个无参构造方法; 如果声明了构造方法,系统则不会提供默认的无参构造方法
方法重载:
在同一个类中
- 方法名相同
- 参数的列表不同{参数的个数不同,参数的顺序不同,参数的类型不同}
- 与访问修饰符和返回值类型无关
- 可以是普通方法构成,也可以是构造方法构成
来看代码:
/**
* 狗类
*/
public class Dog {
String name="小哈"; //昵称
int health = 100; //健康值
int love = 0; //亲密度
String strain = "哈士奇"; //品种
/**
* 无参构造
*/
public Dog(){
System.out.println("执行了无参构造");
}
/**
* 有参构造
* @param name 昵称
* @param strain 品种
*/
public Dog(String name,String strain){
System.out.println("执行了有参构造");
this.name=name;
this.strain=strain;
}
/**
* 宠物的自述
*/
public void print(){
System.out.println(String.format("宠物的自白:\n我的名字叫%s,健康值是%d,和主人的亲密度是%d,我是一只%s",this.name,this.health,this.love,this.strain));
}
}
=====================================
测试类:
public class Test {
public static void main(String[] args){
//创建狗狗对象
Dog dog = new Dog(); //默认调用无参构造
dog.print();
System.out.println();
//调用有参构造
dog = new Dog("旺财","泰迪"); //调用有参构造
dog.print();
System.out.println();
}
}
this的使用
1)this代表什么?:代表是当前类对象(谁调用这个方法,this就是指谁)
2)在方法中调用属性加this和不加this的区别?
this.属性:一定指定的属性
变量名(属性名相同):先查看此方法中是否有变量或参数同名,该变量指的就是
该变量或参数,如果方法中不存在同名的参数和变量,则指的是同名的属性,否
则报错
代码如下:
public class Dog{
public Dog() {
System.out.println("狗出生了---顺产");
}
//自己添加的构造方法
public Dog(String name,String strain) {
this.name = name;
this.strain = strain;
System.out.println("狗出生了...---难产.");
}
public Dog(String a,int b) {
System.out.println("狗出生了----剖腹产");
}
public Dog(int b,String a) {
System.out.println("狗出生了----流产出来了");
}
String name = "无名氏"; // 昵称,默认值是"无名氏"
int health = 100; // 健康值,,默认值是100
int love = 0; // 亲密度
String strain = "哈士奇"; // 品种
/**
* 输出狗狗的信息。
*/
public void print() {
System.out.println("宠物的自我介绍:\n我的名字叫" + this.name +
",健康值是" + this.health + ",和主人的亲密度是"
+ this.love + ",我是一只 " + this.strain + "。");
}
}