Java——final关键字、接口

一、final关键字

用于声明类、方法、属性

修饰类

不能被定义为抽象类或是接口,不可被继承

修饰方法

子类里不可重写覆盖父类中final修饰的方法。

修饰属性

定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。

在声明时同时赋值,往往与static一起使用
声明时不赋值,必须在构造方法中逐一赋值
总的原则:保证创建每一个对象的时候,final属性的值是确定的

package com.ff.javaoop.lei4.finalDemo;

/*public final class Animal {*/
//   public final interface class Animal {    //final修饰的类不能定义为接口
// public final abstract class Animal{        //final修饰的类不能定义为抽象类


public class Animal{

    /*
    变量被final修饰变为常量,不能修改
     */
    final static int age=10;   //直接初始化赋值常量,建议static修饰,这样内存中只有一份,共享
    final int num;       //在创建的每一个对象中,包含一个常量,必须在构造方法中初始化赋值

    public Animal(int num) {    //构造方法初始化常量
        this.num = num;
      //  this.num=5;
    }

    public final void eat(){}     //final修饰的父类方法子类不能重写覆盖

    public static void main(String[] args) {
        Animal f1=new Animal(5);
        Animal f2=new Animal(20);
    }
}
package com.ff.javaoop.lei4.finalDemo;

/*public class Dog extends Animal{*/    //报错,因为Animal类被final修饰,不能被继承
public class Dog {

}

二、接口

从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。作为上层设计需求,设计功能。

1.接口存在的意义
java中一个类只能有一个父类,所以用接口可以实现多继承的逻辑 。

2.接口的特性
1.接口不可以被实例化
2.实现类必须重写接口的所有方法
3.实现类可以实现多个接口
4.接口中的变量都是静态常量

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

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

package com.ff.javaoop.lei4.interfaceDemo;

public interface Animal {
    //接口定义的成员变量是常量,默认前面为 public static final
    int NUM=10;

    //JDK8以后,接口中定义的抽象方法默认被 public abstract 修饰
    void eat();
    void sleep();
}

4.接口的使用类使用implements关键字实现接口。

在类声明中,Implements关键字放在class声明后面。

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

5.接口、类之间的关系

接口与接口之间的关系
接口可以继承接口。一个接口可以继承多个接口

package com.ff.javaoop.lei4.interfaceDemo;

public interface InterfacaseA extends Animal,InterfaceB {   //一个接口可以继承多个接口
}

类与接口的关系
类可以实现接口。一个类可以实现多个接口

类与类之间的关系
一个类只能继承一个父类

package com.ff.javaoop.lei4.interfaceDemo;

public class Dog extends Animal2 implements Animal,InterfacaseA,InterfaceB{    //一个类可以实现多个接口,一个类只能继承一个父类

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }

    @Override
    public void sleep() {

    }
}

测试类

package com.ff.javaoop.lei4.interfaceDemo;

public class TestInterface {
    public static void main(String[] args) {
        System.out.println(Animal.NUM);

       Animal dog=new Dog();
       dog.eat();

       Animal animal=new Animal() {
           @Override
           public void eat() {
               System.out.println("111");
           }

           @Override
           public void sleep() {
               System.out.println("222");
           }
       };
       animal.eat();
       animal.sleep();


    }
}

运行结果

10
狗吃肉
111
222
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值