Java进阶2:抽象类、接口、枚举

抽象类

  • 如果一个类中没有足够的信息来具体描述一个对象,那么这个类就是抽象类。
  • 抽象类不能被实例化,但是其他功能依然存在。
  • 抽象类必须被继承,才能被使用,所以在设计阶段决定要不要设计抽象类。
  • 抽象类包含了子类集合常见的方法,由于这些方法是抽象的,所以我们不能直接使用这个方法。抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

定义规则

  • 在Java中使用abstract关键字来修饰抽象类
//抽象People类
public abstract class People {
    private String name;
    private Boolean gender;
    private Integer age;
    public void show(){
        System.out.println("Hello!"+name+" "+gender+" "+age);
    }
    public People(String name, Boolean gender, Integer age){
        this.name = name;
        this.gender = gender;
        this.age = age;
    }
}
//抽象Student类
public class Student extends People{//抽象类必须被继承
    public Student(String name, Boolean gender, Integer age){
        super(name, gender, age);
    }
}
//主函数
public class HelloWorld {
    //main函数,程序入口
   public static void main(String args[]){
       Student xiaoming = new Student("Xiaoming", true, 21);
       xiaoming.show();
   }
}

抽象方法

  • 如果想设计一个特殊的方法,这个方法由子类来决定功能,那么可以在父类中声明抽象方法。这个方法必须被子类重载,同样由Abstract修饰
  • 声明抽象方法需要条件:
  1. 包含这个方法的类必须是抽象类
  2. 任何子类必须重写父类的方法,或者声明自身也是个抽象类,否则不能被实例化
  3. 抽象方法类似于C++中的声明,不能含有主体
public abstract void haha();

Java接口

  • 接口是抽象方法的集合,通常用interface来进行声明
  • 一个类通过继承接口的方式,从而来继承接口的抽象方法
  • 接口不是类,编写方法和类很相似
  • 类描述对象的属性和方法,而接口包含类要实现的方法
  • 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法
  • 接口无法被实例化,但是接口可以被实现
  • 此外接口还可以被声明一个变量,使他们成为一个空指针,或是被绑定在一个以此接口实现的对象
  • 接口中的方法必须是抽象方法,Java8之后的的接口可以使用default关键字来修饰非抽象方法
  • 除了static和final变量,接口不能含有其他变量
  • 接口支持多继承

接口特性
  • 每一个方法也是隐式抽象的,接口中方法会被隐式指定为public abstract
  • 可以含有变量,但是只能是public static final
  • 接口的方法通过类来实现
  • 一个类可以实现多个接口

接口的定义

  • 接口的定义和类的定义很类似
public interface inter {
    public void eat();
}

接口的实现

  • 类使用implements关键字来实现接口
  • 类继承接口之后必须要重新定义以下接口中的方法
//inter.java
public interface inter {
    public void eat();
}

//interim.java
public class interimplemnt implements inter {
    public void eat(){
        System.out.println("I am eat.");
    }
}
  • 当接口被类实现了以后,那么这个类被实例化的对象就可以直接赋值给这个接口
public class HelloWorld {
    //main函数,程序入口
   public static void main(String args[]){
       inter ani = new interimplemnt();
       //类的对象类型被赋值给了接口类型
       ani.eat();
   }
}
接口的继承
  • 子接口继承父类的接口,接口之间的继承和类之间的继承比较类似,使用extends关键字
public interface Sports{
    public void setHomeTeam(String name);
    public void setVisitingTeam(String name);
}

public interface Football extends Sports{
    public void homeTeamScored(int points);
}
//Football继承自Sports,共需要实现3个方法
接口的多继承
  • Java中的接口允许被多继承
public interface Hotkey extends Sports, Event
标记接口

最常用的接口是没有包含任何方法的接口
标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型,供其他的代码来允许做一些事情
标记接口作用:简单形象的说就是给某个对象打个标签,使对象拥有某些特权

public interface EventListener{}

Java枚举

Java枚举是一个特殊的类,一般表示一组常量,比如4个季节等
Java枚举使用enum关键字来定义,各个常量使用逗号来分割

enum Color{
    RED, GREEN, BLUE;
}

实例代码

public class HelloWorld {
    //main函数,程序入口
   public static void main(String args[]){
       enum Color{
           RED, GREEN, BLUE;
       }
       Color c1 = Color.BLUE;
       System.out.println(c1);
   }
}
  • 每个枚举都是通过Class在内部实现的,且所有的枚举值都是public static final的。
  • 枚举类常常应用于switch语句当中
values(), ordinal(), valueOf()方法

enum定义的枚举默认继承了java.lang.Enum类

  • values() 返回了枚举中所有的值
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样
  • valueOf()方法返回指定字符串的枚举常量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值