java学习之接口(基础知识及在开发中的应用)

java学习之接口(基础知识及在开发中的应用)

·(萌新每日记录,求指点)内容均参考自b站动力节点疯狂java讲义

一、接口基础知识

1、接口的继承:

接口支持多继承,一个接口可以有多个直接父接口(父接口之间用英文逗号隔开)。

2、类实现接口:

类与类之间叫做继承,类与接口之间叫做实现。实现使用implements关键字完成。
例子:

interface MyMath{
    double PI=3.1415926;
    int sum(int a,int b);
    int sub(int a,int b);
}
class MyMathImpl implements MyMath{
//MyMathImpl类(非抽象)中必须 实现/重写/覆盖 MyMath接口中的抽象方法
     public int sum(int a,int b)
     {
     return a+b; 
     }
    int sub(int a,int b)
    {
     return a-b; 
     }
}

非抽象类实现接口时必须将接口中所有的抽象方法 重写/覆盖/实现。

3、接口多态联合使用

使用上述例子中的接口和类,再创建一个test类

public class Test1
{
//·首先MyMath接口是抽象的无法创建对象
//使用多态
  MyMath mm=new MyMathImpl();
//调用接口里的方法(编译时为接口里的方法,运行时调用底层MyMathImpl类里的方法,还是多态)
int result1=mm.sum(10,20);
System.out.println(result1);
int result2=mm.sub(20,10);
System.out.println(result2);
}

注意:一个类可以同时实现多个接口
(这个弥补了单继承带来的缺陷)

二、接口在开发中的作用:

降低程序的耦合性。
(引用动力节点的例子)
//接口:菜单(抽象的)
//厨师是接口的实现者

public interface FoodMenu{
   void xhscjd();//西红柿炒蛋
   void yxrs();//鱼香肉丝
}

//中餐厨师,实现菜单上的菜

public class ChinaCooker implements FoodMenu{
 public void xhscjd(){
    System.out println("中餐的西红柿炒蛋");
    }
  public void yxrs(){
  System.out println("中餐的鱼香肉丝");
   }
}

//西餐厨师,实现菜单上的菜

public class AmericCooker implements FoodMenu{
  public void xhscjd(){
  System.out println("西餐的西红柿炒蛋");
    }
  public void yxrs(){
  System.out println("西餐的鱼香肉丝");
   }
}
//顾客
public class Customer{
   //顾客使用菜单
   private FoodMenu foodMenu;//封装
   //构造方法
   public Customer(){
   }
   public Customer(FoodMenu foodMenu){
     this.foodMenu=foodMenu;
   }
   public void setFoodMenu(FoodMenu foodMenu){
   this.foodMenu=foodMenu;
   }
   public FoodMenu getFoodMenu(){
  return foodMenu;
  }
  //点菜方法
  public void order()
  {
  foodMenu.xhscjd();
  foodMenu.yxrs();
  }
}

//测试程序

public class Test{
//创建厨师
FoodMenu cooker1=new ChinaCooker();
//创建顾客
Customer customer=new Customer(cooker1);
//顾客点菜
customer.order();
}

三、碎片知识:

1、 增强for循环:
注:增强型for循环只能用来取值,却不能用来修改数组里的值

public class HelloWorld {
    public static void main(String[] args) {
        int values [] = new int[]{18,62,68,82,65,9};
        //常规遍历
        for (int i = 0; i < values.length; i++) {
            int each = values[i];
            System.out.println(each);
        }
         
        //增强型for循环遍历
        for (int each : values) {
            System.out.println(each);
        }
         
    }
}

2、==和equals方法:
==运算符和equals()方法用于测试两个变量是否相等。
对于两个引用类型变量,只有指向同一个对象时,==判读那才会返回ture 。==不可用于比较类型上没有父子关系的两个对象。而很多时候判断两个引用是否相等时,也希望是“值相等”的判断规则,并不严格要求两个引用变量指向同一个对象,此时就可以使用equal()方法。
用法:str1.equals(str2),相等返回ture,否则返回false.
我们可以通过重写equals();方法来实现自己的相等标准,
重写equals()方法应满足的条件:
*自反性:对任意x,x.equals(x)一定返回ture;
*对称性:对任意x,y如果y.equals(x)返回true,则x.equals(y)也返回true;
*传递性:对任意x,y,z如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)一定返回true.
*一致性:对任意x,y,如果对象中用于等价比较的信息没有改变,那么无论调用x.equals(y)多少次,返回的结果应该保持一致,要么一直是true,要么一直是false.
*对任何不是nuall的x,x.equals(null)一一定返回false.
3、final关键字
(1)final修饰的类无法继承。
(2)final修饰的方法无法被覆盖。
(3)final修饰的变量一旦赋值后,不可被重新赋值。
(4)fianl修饰的实例变量必须手动赋值,不可采用默认值。
(5)final修饰的引用,一旦指向某个对象后,不能再指向其它对象(但对象内部的内存刻意修改),那么被指向的对象无法被垃圾回收器回收。
(6)final修饰的实例变量,一般和static联合使用,被称为常量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值