面向对象概念及构造器详解!
面向对象
- 在学习面向对象之前我们先来看一下面向过程
面向过程思想
-
面向过程的步骤清晰简单,第一步做什么,第二步做什么
-
面向对象过程适合处理一些简单的问题
面向对象的过程可以用把大象放进冰箱举例
面向对象的分析:
第一步:把冰箱门打开
第二步:把大象放进冰箱
第三步:把冰箱门关上
面向对象思想
-
面向独享是用分类的思维模式,思考解决问题需要哪些分类,然后对这些分类进行单独的思考。最后,才对分类的某个细节进行面向过程的探索
-
面向对象适合处理复杂的问题,适合处理需要多人协作的问题
还是以把大象放进冰箱举例
面向对象的分析过程:
第一步:把动作的实体抽象出来,主体,有人,冰箱,大象
第二步:定义主体,为主题添加对应的功能和属性
人,需要有打开,关闭冰箱的功能,以及放大象进冰箱的功能
冰箱,需要有开门,关门的属性
大象,需要有能放进入冰箱的功能
-
面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据
-
抽象
-
三大特性:封装
继承
多态
创建与初始化对象
使用new关键字创建对象
- 使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认化的初始值以及对类中构造器的调用
代码示例:类中只能有属性和方法
package com.oop.Demo02;
//学生类
public class Student {
//属性:字段
String name;
int age;
//方法
//this代表当前的类,用于本类的方法中使用本类的属性
public void study(){
System.out.println(this.name+"在学习");
}
}
我们在定义了类之后,要在main方法中去调用,这时候,我们就应该创建一个测试类,或者应用类,这个类用来调用这个项目中所有类的方法和属性,一个项目应该只存在一个main方法
eg:
package com.oop.Demo02;
//一个项目应该只存在一个main方法
public class Test {
public static void main(String[] args) {
//类是抽象的,需要实例化,通过new来实例化
//类实例化后会返回自己的对象
//student对象就是一个Student类的具体实例
Student daughter=new Student();
daughter.name="阿尼亚";
daughter.age=5;
System.out.println(daughter.name);
System.out.println(daughter.age);
}
}
输出:
阿尼亚
5
- 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
- 1.必须和类的名字相同
- 2.必须没有返回类型,也不能写void
接下来我们看一下关于构造器
我们首先随便定义一个动物类Animal
Animal.java:
public class Animal {
}
然后在测试中实例化这个类,运行一下看
Application.java:
public class Application {
public static void main(String[] args) {
//new 实例化了一个对象
Animal animal=new Animal();
}
}
可以看出我们在上面的Animal类中是什么都没写的,然而实例化看一下class文件可以看出
Animal.class:
package com.oop.Demo02;
public class Animal {
public Animal() {
}
}
可以看出在class中已经生成了一个class文件
一个类中即使什么都不写,也会存在一个方法
而我们看一下无参构造和有参构造
上述,自动生成的方法就是一个无参构造方法,我们自己写一下看,
无参构造:
public class Animal {
//属性 name
String name;
//无参构造
public Animal() {
}
}
调用一下无参构造的方法:
public class Application {
public static void main(String[] args) {
//new 实例化了一个对象
Animal animal=new Animal();
animal.name="bangde";
System.out.println(animal.name);
}
}
输出:
bangde
即使我们不加这个无参构造,输出也能得到自己想要的,因为上文说过编译器会自动生成一个午餐的构造方法。
有参构造:
public class Animal {
//属性 name
String name;
//有参构造
public Animal(String name) {
this.name = name;
}
}
加有参构造之后,我们可以看到,刚才实例化的对象,已经开始报错了!
插入图片:
那是因为,我们创建了有参构造方法之后,编译器便不会为我们生成无参的构造方法了,这时如果我们还想要有无参的构造方法,需要自己再写一个无参的构造方法!
public class Animal {
//属性 name
String name;
// 无参构造
public Animal() {
}
public Animal(String name) {
this.name = name;
}
}
这是程序可以正常运行,那如果我们想调用无参的构造方法,只需,给方法传入对应的参数即可!
public class Application {
public static void main(String[] args) {
//new 实例化了一个对象
Animal animal=new Animal();
animal.name="邦德";
System.out.println(animal.name);
Animal animal2=new Animal("汪汪");
System.out.println(animal2.name);
}
}
当然,我们再idea中,也是有快捷键去生成有参和无参的构造方法的快捷键的。
当在类中定义过属性之后
只需,按住ALT+INSERT键,点击Constructor,然后选中想要创建有参构造方法的属性即可生成有参的构造方法,如果方法中想包含多个属性,按住ctrl键,然后点击多个即可!
如果想生成无参的构造方法,点击过Construcor之后点击select None即可
插入图片: