一、枚举(枚举比普通类里面多一个对象成员)
1、语法格式
enum 枚举名{
对象1,对象2,。。。;
字段;
方法;
私有化的构造方法;
内部类;
}
代码实例:
enum Sex{
WAN(“男”),WOMAN(“女”),RENYO(人妖“”);
private String name =name;
Private Sex(String name){
this.name = name;
}
public String toString(){
return name;
}
}
2、注意事项
枚举继承自Enum,但是Object才是最终父类;枚举只能隐式继承自Enum,不能显示继承自任一个枚举和类,否则报错。
枚举的构造方法只能被private修饰符修饰,如果你看到构造方法没有修饰符修饰,其实底层还是用的private修饰符修饰
3、枚举写的单例模式
enum sex{
instance;
} 这是最简单的单例模式
二、抽象类
1、语法格式
abstract class 类名{
和普通类的成员一样,只是多了一个抽象方法
}
抽象方法的语法格式:abstract void show(); 抽象方法是没有主体的
抽象类里面的构造方法是不能实例化的
2、注意事项
类与类之间是单继承关系
抽象类继承了抽象类,可以不实现父类中的抽象方法,因为抽象类中是可以存在抽象方法的
普通类继承了抽象类,必须要覆写父类中的抽象方法、
抽象方法只能存在抽象类中
三、接口
1、语法格式
interface 接口名{
全局常量 在接口中定义的变量都是全局常量 都是public static final修饰的
抽象方法 都是public abstract修饰的 覆写的时候注意权限修饰符等级!!!
}
注意:接口中是没有普通方法、构造方法等,只能有全局常量、抽象方法。
普通类只要继承了抽象类或者实现了接口都必须覆写抽象方法,因为抽象方法不可能在普通类里存在,只能在接口、抽象类里存在。
接口与接口之间是多继承,类与类之间是单继承,类与接口之间是多实现。
一个普通类既要继承父类也要实现多个接口语法格式怎么做呢?
class A extends B implements C,D{
普通类,覆盖抽象方法即可
}
四、匿名内部类
class TestAnonymousInnerClass7{
public static void main(String[] args){
new C().a.jump();
}
}
/**
匿名内部类:没有名字的内部类。好处就是可以少写代码,非常流行的表达形式
匿名内部类一般应运用于接口和抽象类,由于抽象类和接口都不能实例化,因此在使用匿名内部类时,那个实例其实匿名函数的实例。
*/
interface Animal{
void jump();
}
//
class C{
Animal a = new Animal(){/*
Animal a = new Animal()这一坨就相当于声明了一个类名,这个实力不是接口A的实例,而是这个匿名类的实例。
*/
public void jump(){
System.out.println("这些动物在跳");
}
};
}