Java Interface,abstract class和enum的比对和组合使用方法

本文探讨了Java中的Interface、abstract class和enum的区别与用途。Interface的函数默认为public和abstract,可多实现;abstract class只能单继承,可包含非抽象方法和变量。enum在Java中是安全的常量容器,编译后为final class。建议优先使用Interface,根据需求选择abstract class或enum。
摘要由CSDN通过智能技术生成

java Interface应该是为了实现多继承而添加的,提到Interface,那就不得不说abstract class,的确abstract class和Interface有很多地方很相似,例如都是抽象,都不能实例化,implements或者extends需要实现里面全部的abstract函数。但是他们的区别也很多。
区别:
1 Interface中的函数默认属性是public和abstract(无论是否在code中明确写出来),函数不能有body;而abstract class的默认属性应该是protected的,如果属性不是abstract,那就需要body或者是abstract属性。
2 Interface可以implements多个,而abstract只能extends一个。
3 abstract class还是class,从编译后的class文件中,仍然能够看到默认的构造函数,而interface没有。
4 Interface中的成员变量默认是public static final的,也就是常量,所以不能定义可变量,但是abstract class除了定义常量还可以定义可变量。如果能够选用interface,就最好用interface。另外如果文件中大量使用常量,并且不同文件中会使用同一个,那么可以将使用到的所有常量定义在一个interface里面,不需要定义函数,也不要使用一段时间后定义函数,之后各个使用的类直接implements interface就可以了,或者import interface也可以。
例如:

public interface IColor {
   
    public static final int RED = 0;
    public static final int BLUE = 1;
    public static final int GREEN = 2;
}
public class Cloth implements IColor {
   
    protected int computePrice(int color) {
   
        if (color == RED) {
   
            return 100;
        } else {
   
            return 50;
        }
    }
}

当然也可以用import interface的方式了,这样就无论interface中是否有定义函数,都可以使用里面的常量。
例如:

public interface IColor {
   
    public static final int RED = 0;
    public static final int BLUE = 1;
    public static final int GREEN = 2;
    void setColor();
}

import Icolor;
public class Cloth {
    //这里如果写成public class Cloth implements IColor ,那么就必须实现setColor
    protected int computePrice(int color) {
   
        if (color == IColor.RED) {
   
            return 100;
        } else {
   
            return 50;
        }
    }
}

interface还可以嵌入到类里面,将常量根据类别进行分组,使得对外使用这些常量更好的组织在一起。
例如

public class Car {
   
    int mClor;
    int mSize;
    public interface Size {
   
        public static final int BIG = 0;
        public static fianl int SMALL = 1;
    }
    
    public interface SkinColor {
   
        public static final int RED = 0;
        public static final int BLUE = 1;
    }
    
    public int setColor (int color) {
   
        mClor = color;
    }

    public int setSize (int size) {
   
        mSize = size;
    }
}

import Car;
public class CarShop {
   
    Car newCar = new Car();
    newCar.setColor(Car.SkinColor.RED); // 这里不能写成newCar.setColor(newCar.SkinColor.RED)
    newCar.setColor(Car.Size.BIG);
}

当然用interface当enum使用,不如enum安全了,例如setColor的参数是int,除非setColor里面判断传入参数的有效性。
例如

public void setColor (int color) {
   
    if (color < RED || color > BLUE) {
   
        return -1;
    }
    mClor = color;
    return mClor;
}

既然提到了enum,我们就研究一下,Java enum的功能比较强大,使用也比较方便。

package son;
public enum TestEnum {
   
    ALWAYS_USE,
    ASK_EVERY_TIME,
    NEVER_USE;
    public void set(TestEnum value) {
   
        System.out.println(value);
    }
}

import son.TestEnum;
public class Test {
   
    public TestEnum returnEnumValue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值