当我们使用java的传统方法去创建类的实例对象并可以返回参数值和方法中的返回值
package com.westos.Direction;
/**
* 方式1:
* 创建该类的实例化对象
*/
public class Direction {
//创建该类的私有无参构造,目的是不让外界创建该类的对象
private Direction() {
}
//创建Direction的实例对象,可以实现类名直接调用方法
/**
* 这里的修饰符(private static final)的作用
* public 是为了外界可以去访问所创建的该类对象
* static 静态修饰是为了外界可以直接通过类名.对象调用的方法去访问该对象
* final 是为最终确定,防止外界去修改该类的对象
*/
public static final Direction FRONT=new Direction();
public static final Direction BEHIND=new Direction();
public static final Direction LEFT=new Direction();
public static final Direction RIGHT=new Direction();
}
package com.westos.Direction;
/**
* 方式2:
* 通过有参构造来实现实例对象的创建
*/
public class Direction2 {
private String name;
//创建一个私有的有参构造
private Direction2(String name) {
this.name=name;
}
//创建该类的实例对象
/**
* 这里的修饰符(private static final)的作用
* public 是为了外界可以去访问所创建的该类对象
* static 静态修饰是为了外界可以直接通过类名.对象调用的方法去访问该对象
* final 是为最终确定,防止外界去修改该类的对象
*/
public static final Direction2 FRONT=new Direction2("前边");
public static final Direction2 BEHIND=new Direction2("后边");
public static final Direction2 LEFT=new Direction2("左边");
public static final Direction2 RIGHT=new Direction2("右边");
//通过公共的访问方法去获取实例变量的参数
public String getString () {
return name;
}
}
package com.westos.Direction;
/**
* 方式3:在成员位置创建实例对象
*/
public abstract class Direction3 {
//创建抽象方法
public abstract void show();
private String name;
//创建有参构造
public Direction3(String name) {
this.name=name;
}
//获取传入参数的值
public String getString() {
return name;
}
//创建该类的实例对象
public static final Direction3 FRONT=new Direction3("前边") {
//
@Override
public void show() {
System.out.println("前面");
}
};
public static final Direction3 BEHIND=new Direction3("后边") {
@Override
public void show() {
System.out.println("后边");
}
};
public static final Direction3 LEFT=new Direction3("左边") {
@Override
public void show() {
System.out.println("左边");
}
};
public static final Direction3 RIGHT=new Direction3("右边") {
@Override
public void show() {
System.out.println("右边");
}
};
}
package com.westos.Direction;
/**
* 创建一个测试类
*/
public class DirectionDome {
public static void main(String[] args) {
//用方式1的直接类名调用方法
Direction front = Direction.FRONT;
System.out.println(front);
System.out.println("-------------------------");
//用方式2的类名调用方法
Direction2 behind = Direction2.BEHIND;
System.out.println(behind);
String str = behind.getString();
System.out.println(str);
System.out.println("-------------------------");
//使用方式3的方法创建
Direction3 left = Direction3.LEFT;
System.out.println(left);
left.show();
String str2 = left.getString();
System.out.println(str2);
System.out.println("-----------------------");
String str3 = left.toString();
System.out.println(str3);
}
}
运行结果:
com.westos.Direction.Direction@70dea4e
-------------------------
com.westos.Direction.Direction2@5c647e05
后边
-------------------------
com.westos.Direction.Direction3$3@33909752
左边
左边
-----------------------
com.westos.Direction.Direction3$3@33909752
我们也可以通过枚举的方法去创建类的实例对象,虽然枚举的方法代码量少,简洁方便,但是一般在开发中用的很少,一般建议去使用传统方法去编译:
package com.westos.Enum;
/**
* 方式1:使用枚举创建实例对象
*/
public enum Direction {
FRONT,BEHIND,LEFT,RIGHT;
}
package com.westos.Enum;
/**
* 方式1:使用枚举创建实例对象
*/
public enum Direction {
FRONT,BEHIND,LEFT,RIGHT;
}
package com.westos.Enum;
/**
* 方式3:在成员位置用匿名内部类的方式去创建类的实例对象
*/
public enum Direction3 {
FRONT("前"){
public void show() {
System.out.println("前");
}
},
BEHIND("后"){
public void show() {
System.out.println("后");
}
},
LEFT("左"){
public void show() {
System.out.println("左");
}
},
RIGHT("右"){
public void show() {
System.out.println("右");
}
};
//创建一个抽象方法
public abstract void show();
private String name;
private Direction3(String name) {
this.name=name;
}
public String getString () {
return name;
}
}
package com.westos.Enum;
/**
* 这是一个测试类
*/
public class DirectionDome {
public static void main(String[] args) {
//使用枚举的第一种方式
Direction behind = Direction.BEHIND;
System.out.println(behind);
System.out.println("-------------------------");
//使用枚举的第二种方式
Direction2 front = Direction2.FRONT;
System.out.println(front);
String str = front.getString();
System.out.println(str);
System.out.println("--------------------------");
//使用枚举的第三种方式
Direction3 right = Direction3.RIGHT;
System.out.println(right);
String str2 = right.getString();
System.out.println(str2);
//枚举的对象可以去调用toString方法,返回的是声明实例的常量
String str3 = right.toString();
System.out.println(str3);
right.show();
}
}
运行结果:
BEHIND
-------------------------
FRONT
前
--------------------------
RIGHT
右
RIGHT
右
以上分别是我们按照传统方法和枚举的方法去创建类的实例对象,根据运行结果我们可以自己去比较二者的区别。