面向对象2.0
创建对象
接着昨天的说~~~~~~~~
上回说到面向对象的一些基础的概念,以及类的组成,对象的组成,以及类和对象之间的关系,那么接着上回,今天来介绍介绍创建对象
在说创建对象之前先说一下创建对象的过程
1、首先会分配空间,分配堆空间,在内存中开辟出来一个空间存储数据,这一步就给属性赋上默认值,(八种基本数据类型的默认值,String默认值是null)
2、初始化属性,这里就是将属性进行初始化处理,如果创建属性的时候给属性赋值了,那么这里就会给属性赋上初始化的值
3、执行构造方法,为属性赋上构造参数值。
--------创建对象完成------
说到创建对象了顺便提下给属性赋值的几个时机。
1、创建属性的时候,第一次;
2、执行构造方法时,第二次;
暂时不说后面的第三次了,后面再提。
好了,我们进入正题:真正创建对象
创建对象方式:
1、通过无参构造方法创建对象
语法:类名 引用 = new 类名();
//例如:Animal animal = new Animal();
//使用的是无参构造方法,所以在括号里是没有参数值的
//这里的引用其实简单来说就是对象名,将对象存到这个引用中
2、通过有参构造方法创建对象
语法:类名 引用 = new 类名(实参列表);
//例如:Animal animal = new Animal("导弹",23);
//其中,这两个参数分别为 name 和age;
使用对象
1、使用对象的属性
语法:引用名.属性名; 可以获得对象的属性
例如:animal.name; 可以获得Animal对象的name名字;
对属性再次赋值语法:
引用名.属性名 = 值;可以对属性再次赋值;
(当然属性的最终值还是看这步的);
2、使用对象的方法
语法:引用名.方法名();
例如:现在假设在Animal类中有个吃的方法 那么示例就是:
animal.eat();调用对象的吃方法
代码实例:(包括创建对象,使用对象的属性,调用属性的方法)
//创建对象,并且调用对象的属性和方法
package day22;//这个是创建有个包,可有可无
//公开类/这个在任何的corejava前期都会有说。
public class T22 {
//创建主函数
public static void main(String[] args) {
//创建完成类之后,我们通过类来创建一个对象
// Animal animal = new Animal();//通过无参构造方法创建对象
//调用对象的属性
// animal.name = "导弹";
// animal.age = 2;
//打印出name和age
// System.out.println(animal.name + " " + animal.age);
//通过有参构造方法创建对象
Animal animal = new Animal("导弹",3);
//调用对象的方法
animal.eat();
}
}
//创建对象
class Animal {
//创建属性
String name;
int age;
//创建方法
public void eat() {
System.out.println(name + "吃奥里给");
}
//无参构造方法,一个有参一个无参不要忘了
//就算用不到无参,也要创建一个
public Animal() {}
//有参构造方法
public Animal (String n,int a) {
name = n;
age = a;
}
}
方法重载(OverLoad)
概念:允许一个类中定义多个重名的方法,很典型的:构造方法
在程序需要使用构造方法的时候,程序会根据用户创建对象在参数列表中是否加了参数来自动调用是使用有参还是无参,。
语法要求:
1、参数列表必须不同(如果只是参数列表的顺序不同,不算重载)
2、方法名必须相同
3、对修饰符、返回值类型、异常等,不做要求;
使用重载方法: 程序会根据用户自己的操作自主决定调用哪个方法。
好处: 使用方法重载,可以减少代码的冗余,可以根据用户传入的参数的不同调用同一个方法,但是返回值确实不同,但是对于用户来说,他们调用的就是同一个方法
代码实例:
package day22;
public class T22 {
public static void main(String[] args) {
//创建对象
//使用无参构造方法创建对象
Animal animal = new Animal();
//为属性赋值
animal.name ="导弹";
animal.age = 2;
//打印出属性
// System.out.println(animal.name + " " + animal.age);
//调用方法
animal.eat();//调用无参eat方法
animal.eat("奥里给");//调用有一个参数的方法
animal.eat("奥里给",100);//调用有两个参数的方法
}
}
//创建对象
class Animal {
//创建属性
String name;
int age;
//创建无参构造方法
public Animal () {}
//创建有参构造方法
public Animal (String n, int a) {
name = n;
age = a;
}
//创建无参方法
public void eat () {
System.out.println("这是无参方法");
}
//创建有参方法 完成方法的覆盖
public void eat (String xiang) {
System.out.println("他在吃" + xiang);
}
//创建两个参数的方法
public void eat (String baba,int i) {
System.out.println("他吃了"+ i + "坨" + baba);
}
}
其实对于对象的调用者来说,一直都是在在调用一个eat方法,但是结果确实不同的,这就是方法重载的好处,根据实参列表自动选择要调用的对象的方法
最后再说一边对象的创建过程,这次应该就不迷糊了;
首先:
1、分配堆空间,为属性赋上默认值;
2、初始化属性,为属性赋上初始化的值;
3、执行构造方法,为属性赋上构造参数值;
再提一点;
//创建无参构造方法
public Animal () {}
//创建有参构造方法
public Animal (String n, int a) {
name = n;
age = a;
这里写有无参构造方法的时候,使用 n和a总归还是不怎么好的,不符合了编程语言里的望名生意,所以下一章说的就是解决这个问题了先提一点:this 关键字;
下章继续 顺便如果有错有请大佬批评。
好心人留个赞再走呗,让我知道你在看
# 死磕java