final关键字&接口

final关键字

    1.final意为常量、不可变得,是java中的关键字。
    2.final可以修饰属性、方法和类。

finla修饰属性
    1.静态变量:被static修饰静态变量不能被final修饰用构造方法赋值。被static修饰的静态变量进入了方法区,在方法区里只的静态变量只会运行一次,所以每实例化对象就要给静态变量赋值。final是修饰常量,所以会报错
在这里插入图片描述
所以,final在修饰静态变量的时候,只能在声明的时候就给他赋定制;

static final int a = 10;

    2.修饰成员变量:被final修饰的成员变量可以在声明时赋值,也可以先创建,再用构造方法为其赋值,每实例化次对象就为其赋值一次,且在这个对象使用时不能被改变

    final int num;
     public Demo7(int num){
            this.num =num;
    }
    
    public static void main(String[] args) {
    Demo7 d1 = new Demo7(10);
    Demo7 d2 = new Demo7(20);
    }

finla修饰方法
    1.被final修饰的成员方法不能被重写
    2.在形式参数前加final,形参在赋值后不被改变

public void m2(final int a){//不会被改变
        System.out.println(a);
        //a++;方法体中会改变a值的语句都会报错
    }

finla修饰类
    用final修饰类:不能被定义为抽象类,也不能被继承。所以用final修饰的类只能作为子孙类。因为集成父类就相当于父类的扩展,final是常量,当然不不允许自己修饰的类被改变。所以会报错

接口(interface)

    在实现一个项目的时候,有时必须从几个类中派生出一个子类,来继承父类的属性、方法。但是java不支持多继承,所以,java开发者设计了接口,用来弥补不能实现多继承的缺点。那什么是接口呢?从本质上讲,接口是一种特殊的抽象类,这种抽象类在JDK8之前只包含常量和抽象方法的定义。在JDK之后,更新了接口,现在在接口里面可以定义常量和抽象方法、默认方法和静态方法,而且接口可以多继承

接口的定义:使用 interface 关键字用来声明一个接口。

    [访问修饰符] interface 接口名称 [extends 其他的接口名1,….其他的接口名n] {
     // 声明常量 抽象方法 静态方法 默认方法
}

接口的使用:类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
     [访问修饰符] class 类名 implements 接口名1,接口名2……{ }

结合继承:
     [访问修饰符] class 类名 extends 父类名 implements 接口名1,接口名2……{ }

接口的特性:
    与继承关系类似,接口与实现类之间存在多态性,而且接口不能实例化对象(无构造方法),但可以声明对象的引用(多态性)。接口不是被类继承了,而是要被类实现。
    如果实现接口的类中没有实现接口中的全部方法,必须将此类定义为抽象类。

代码演示(接口的定义):

public interface MyInterface{
    //接口不能实例化对象,不能有构造方法
    //所以有默认方法,让子类来实例化对象
    //接口可以声明成员变量
    //public static final int num =10;
    //public static final 都默认不写
    public static final int num1 =15;
    int num = 10;

    //接口可以声明抽象方法
    //public 可以默认不写
    public void m1();
    void m2();

    //在JDK8之前,接口只能声明前两种类型,但是在8以后,又多了两种

    //默认方法
    default void m3(){
        System.out.println("默认方法m3");
    }

    //静态方法
    static void m4(){
        System.out.println("静态方法m4");
    }
}

接口的多继承即接口的实现

//接口可以实现多继承,interface
public interface MyInterfaceA {
}

public interface MyInterfaceB {
}


public interface MyInterface extends MyInterfaceA,MyInterfaceB{
    //接口可以多继承,当一个类实现这个接口时,要重写所有继承接口的抽象方法

    public static final int num1 =15;
    int num = 10;

    //接口可以声明抽象方法
    //public 可以默认不写
    public void m1();
    void m2();

    //默认方法
    default void m3(){
        System.out.println("默认方法m3");
    }

    //静态方法
    static void m4(){
        System.out.println("静态方法m4");
    }
}
//定义类

//实现接口
//因为接口里面有抽象方法,所以
//要么给这个类加abstract使这个类称为抽象类
//要么重写接口里面的所有抽象方法

//public class abstract MyInterfacement implements MyInterface{
public class MyInterfacement implements MyInterface {
    //implements来实现类继承接口
    public void m1(){
        System.out.println("重写后的m1方法");
    }

    public void m2(){
        System.out.println("重写后的m2方法");
    }
    //可以直接用类名调用接口的成员变量
    public static void main(String[] args) {
        System.out.println(MyInterface.num);
        System.out.println(MyInterface.num1);
        //子类来实例化对象,调用父类的方法
        MyInterfacement my = new MyInterfacement();
        my.m1();
        my.m2();
        my.m3();
        MyInterface.m4();//静态的
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值