


package day2;
public class Demo02 {
/*
* 构造方法 == 构造器
* 构造器语法:在类中定义,方法名与类名一样!包括大小写,不能定义返回值。
* 构造器的作用,用于创建对象,初始化对象属性,
* 构造器的参数:一般是初始化对象的前提条件
* 区别于方法:方法是功能,是操作算法,使用对象调用方法
* 构造器是用来创建对象,是初始化方法,使用new运算调用
*
*/
public static void main(String[] args){
Point p1 = new Point(3,3);//new运算调用构造器,返回对象
p1.up(2);//使用引用调用对象的方法,实现移动的功能
System.out.println(p1.y);
Point p2 = new Point(5,5);
p2.up(2);
System.out.println(p2.y);
}
}
class Point{
int x;
int y;
public Point(int x, int y){//构造方法
this.x = x;
this.y = y;
}
public void up(int dy){
this.y = this.y - dy;
// y = y - dy;//当局部变量与成员变量名字不同时,可以省略this
}
}

package day2;
/*
* 默认构造器
* new运算调用的是构造器!
* 1)类一定有构造器!记住,这是真的,不允许质疑!
* A.如果类没有声明(定义)任何的构造器,java编译器会自动插入默认构造器!
* B.如果类声明了构造器,java编译器将不再提供默认构造器
* 默认构造是无参数,方法体是空的构造器
*/
public class Demo03 {
public static void main(String[] args) {
Foo foo = new Foo();//调用了javac自动添加的默认构造器
//Koo koo = new Koo();//编译错误,没有Koo()构造器
Koo koo = new Koo(8);
}
}
class Foo{}//Foo有构造器,有无参数的默认构造器!
class Koo{
public Koo(int a){//声明了有参数构造器
System.out.println("Call Koo(int)");
}
}

package day2;
/*
* 构造器是可以重载的
* 重载的目的是为了使用方便
* 重载规则与方法重载规则相同。
*/
public class Demo04 {
public static void main(String[] args){
//创建原点
Point1 o = new Point1();//new Point1(0,0)
//创建对角线上的点
Point1 p1 = new Point1(5);//new Point1(5,5)
Point1 p2 = new Point1(3,4);
System.out.println(p1.x+","+p1.y);//5,5
}
}
class Point1{
int x; int y;
public Point1(){
this.x = 0;this.y = 0;
}
public Point1(int x,int y){
this.x = x; this.y = y;
}
public Point1(int x){
this.x = x; this.y = x;
}
}