在Java中,我们知道面向对象有三大特征:封装、继承与多态。我们也了解到类是一个抽象的概念,我们不能进行直接地使用。要使用一个类中的属性与功能,必须对类进行实例化。
所谓的实例化,我们可以理解为创建该类的对象。在创建对象时,除了要用关键字外,我们还需要借助构造方法,来完成对类的实例化。
1.利用无参构造完成对类的实例化
构造方法的定义:
在类中,方法名与类名相同,没有返回值类型,甚至连void都没有
public class MyTest3 {
public static void main(String[] args) {
//无参构造完成对类的实例化
Star star = new Star();
star.setName("陈奕迅");
star.setAge(35);
System.out.println(star.getName());
System.out.println(star.getAge());
}
}
class Star{
//私有化成员变量
private String name;
private int age;
/*无参构造不写也会默认存在的,但也可以自己手动写出
构造方法的语法为:构造方法名与类名同名,没有返回值的类型,
甚至连void也没有*/
public Star(){
}
//提供get set方法可以对成员变量进行赋值与显示的操作
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
输出的结果为:陈奕迅
35
注意:我们自定义一个类时,类中就会默认存在一个空参的构造方法。当我们只是用无参构造去完成类的实例化时,此空参构造方法可写可不写。
2.利用有参构造完成对类的实例化
构造方法是可以进行方法重载的。
所谓的方法重载就是在一个类中,允许一个以上的同名方法,方法名相同,参数列表不同(参数的类型不同,参数的个数不同),不以返回值类型作区别。
通过有参构造进行对类的实例化,通常比起无参构造对类的实例化比较简单。
public class MyTest {
public static void main(String[] args) {
//使用有参构造来实现对类的实例化
Star star = new Star("王力宏", 32);
System.out.println(star.getAge());
System.out.println(star.getName());
}
}
class Star{
//私有化成员变量
private String name;
private int age;
//提供有有参构造方法
public Star(String name,int age){
this.name=name;
this.age=age;
}
//提供get方法即可
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
输出的结果为:
32
王力宏
但要注意的是:
当使用有参构造方法去实现对类的实例化时,此时默认的无参构造方法将不会存在。如果还想要无参构造来实现对类的实例化时,自己需要手动将无参构造方法写出来。
3.无参构造,有参构造对类的实例化
由上面可见,一个标准的类由成员变量,成员方法以及构造方法构成。下面给出一个标准类的写法:会提供成员变量,成员方法以及构造方法。
public class MyTest {
public static void main(String[] args) {
//使用无参构造来完成对类的实例化
Star s1 = new Star();
s1.setName("林俊杰");
s1.setAge(30);
System.out.println(s1.getName());
System.out.println(s1.getAge());
System.out.println("=====================");
//使用有参构造来完成对类的实例化
Star s2 = new Star("许嵩", 28);
System.out.println(s2.getName());
System.out.println(s2.getAge());
}
}
class Star{
//1.私有化成员变量
private String name;
private int age;
//2.提供无参构造方法
public Star(){
}
//3.提供有参构造方法
public Star(String name,int age){
this.name=name;
this.age=age;
}
//4.提供get set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
输出的结果为:
林俊杰
30
=====================
许嵩
28
4.构造方法练习题
练习:定义一个长方形(Rectangle)类,定义求周长与求面积的方法,然后定义一个测试类进行测试。
//Rectanle 类
public class Rectangle {
//1.成员变量私有化
private double chang;
private double kuan;
//2.无参构造方法
public Rectangle(){
}
//3.有参构造方法
public Rectangle(double chang,double kuan){
this.chang=chang;
this.kuan=kuan;
}
//4.提供set get方法
public double getChang() {
return chang;
}
public void setChang(double chang) {
this.chang = chang;
}
public double getKuan() {
return kuan;
}
public void setKuan(double kuan) {
this.kuan = kuan;
}
//提供周长与面积的方法
public double zhoouchang(){
return chang*kuan;
}
public double area(){
return 2*(chang+kuan);
}
}
//测试类:
public class MyTest {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.setChang(5);
rectangle.setKuan(3);
System.out.println(rectangle.zhoouchang());
System.out.println(rectangle.area());
System.out.println("===================");
Rectangle rectangle1 = new Rectangle(5, 5);
System.out.println(rectangle1.zhoouchang());
System.out.println(rectangle1.area());
}
}
输出的结果为:
15.0
16.0
===================
25.0
20.0