Java学习笔记(二)——接口

接口一系列概念

接口是个啥?

接口:对方法的抽象(简而言之,只有方法,没有方法体)。

 public void lockDoor(String input);

为啥要用接口?

有些场景下,假设你需要用到抽象的功能、属性,于是你用到的父类、子类来实现;当子类有自己想要实现的特殊方法,可以对父类进行重写来实现,可但现在你遇到的问题是:你写父类方法的时候有好多种情形,这些都是并列的,是你打算在子类重写的时候用,但是父类怎么办呢?你说:我可以随便写一个嘛,只要子类重写不就好了。

这样的确没错,但是这样的方式,多写了一次无用的代码不说,如果一个不小心忘记在子类中重写这个方法,就会导致函数执行错误方法。

举个栗子:

假设动物是一个父类,老虎、猫、狗、鸟是子类,吃是他们共有方法,每个子类都会重写这个方法,毕竟吃的东西不一样,但是问题来了,在父类中,应该“吃什么呢”?

再假设一个大佬工程师在设计界面,他需要设计一个按键,对于每个开发人员来说,这个按键触发的事件是根据需求变化的,大佬工程师在一开始设计的时候也不会把功能写进去。

这时候接口的出现就显得尤为必要,只管声明方法,具体方法体(方法如何实现),通过其他类来实现。

接口的定义

关键字 interface

public interface 接口名{}

属性:默认为 static+final 属性,必须要赋初值,可以用接口名直接调用属性。

方法:没有方法体 —— 默认抽象方法。必须要在新的类里面重写方法体。

 public void lockDoor(String input);

接口的特点

接口不可以直接创建对象。

接口的使用方法

  1. 定义一个新的类实现接口。
    public 类名 implements 接口名 {}
  2. 在类中重写接口所有抽象方法。

 重写规则和继承一样:函数方法名、传参要和接口一致。

static,final两个相近但是彼此没什么关系的概念

static 静态的、唯一

修饰范围:属性、方法、成员内部类(类中的成员类)

特       点:

  1. 不管有多少对象,static修饰的资源只有一份。(其中某个对象改变这个值,所有对象的这个值都改变)

         

         

            

      2.  被修饰的资源属于类,类名可以直接调用。(eg:animal.name="瓜瓜",animal是类名,               不是对象名)

public interface LockIF {
    String brandName="masterlock";            //接口内定义属性,默认为static final属性 
    public void openDoor(String input);
}

public static void main(String[] args) {
        System.out.println(LockIF.brandName); //直接通过接口名调用
}

final   最终形态 不可改变(类比c++中的const)

修饰范围:属性、方法、成员内部类(类中的成员类)

特       点:

  1. 被修饰的资源属于对象。(但只要static修饰过,这个资源还是属于类。)
  2. 被修饰的属性:不可改变,需要初始化(初始化可以在定义的时候,也可以利用构造函数初始化)。
  3. 被修饰的方法:不能重写。
  4. 被修饰的类:不能被继承(派生子类)。

练习代码:

//练习:书写一个锁为接口,有开门方法,有不同种类、方式的锁可以实现开门,重写开门方法

public interface LockIF {                 //设置一个锁接口
    String brandName="masterlock";        //初始化属性
    public void openDoor(String input);   //定义抽象方法——————开门
}

//第一个类——————指纹解锁
public class FingerprintLock implements LockIF{     //重写方法
    @Override
    public void openDoor(String input) {
        if(input.equalsIgnoreCase("userFingerprint")) {
                System.out.println("The door is open, Welcome to home, my host!  ——————————yours " + LockIF.brandName);               //直接用接口名调用属性
        }
        else
            System.out.println("Recognize Failed.");
    }
}

//第二个类——————密码解锁
public class passwordLock implements LockIF{
    @Override
    public void openDoor(String input) {
        if (input.equalsIgnoreCase("131590")) {
                System.out.println("The door is open, Welcome to home, my host!  ——————————yours " + LockIF.brandName);
        else
            System.out.println("The password is wrong.");
    }
}

……

public class Door {

    public static void main(String[] args) {
        System.out.println(LockIF.brandName);

        FingerprintLock l3 = new FingerprintLock();
        passwordLock l5 = new passwordLock();

        l3.openDoor("userFingerprint");
        l3.openDoor("");

        l5.openDoor("131590");
        l5.openDoor("2612213");

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值