内部类
概念:将一个类A定义在类B里面,里面的那个类A就称为内部类(innerclass),类b称为外部类(outerclass)
使用原因:在类A内部,还有一个部分需要一个完整的结构b进行描述,而这个内部的类B又只为外部事物A提供服务,不在其他地方单独使用,那么整个内部的完整结构B最好使用内部类。
总的来说,遵循高内聚,低耦合的面向的对象开发原则
举例:Tread类内部声明了state类,表示线程的生命周期
public class OuterClassTest {
public static void main(String args[]){
//1.创建Person的静态成员内部类的实例
Person1.Dog dog = new Person1.Dog();
dog.eat();
//2.创建Person 非静态成员内部类的实例
Person1 p1 = new Person1();
Person1.Bird bird = p1.new Bird();
bird.show1();
}
}
class Person1{//外部类
public void eat(){
System.out.println("人吃饭");
}
//静态成员内部类
static class Dog{
public void eat(){
System.out.println("狗吃骨头");
}
}
//成员内部类
class Bird{
public void eat(){
System.out.println("鸟吃虫子");
}
public void show1(){
eat();
this.eat();
Person1.this.eat();
}
}
}
枚举类
理解: 本质上也是一种类,不过类的对象是有限的、固定的几个,不能让用户随意创建
私有化构造器,然后把对象在类里面创建好。
//枚举类
package enumtest;
public enum Status {
BUSY,FREE,VOCATION,DISMISSON;//常量
String name;
int index;
Status(String name, int index){
this.name = name;
this.index = index;
}
Status() {
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getIndex(){
return index;
}
public void setIndex(int index){
this.index = index;
}
}
//empolyee类
package enumtest;
public class Employee {
private int age;
private String name;
private Status status;
public void Employee(){};
public Employee(String name, int age, Status status){
this.age = age ;
this.name = name;
this.status = status;
}
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;
}
public Status getStatus(){
return status;
}
public void setStatus(Status status){
this.status = status;
}
@Override
public String toString() {
return "Employee{" +
"name = " + name + '\'' +
", age = " + age +
", status = " + status +
'}';
}
}
//主文件
package enumtest;
public class EmployeeTest {
public static void main(String[] args) {
Employee e1 = new Employee("Tom",21,Status.BUSY);
System.out.println(e1);
}
}