Java学习笔记(十):接口及关键字总结

一、定义

​ 为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能。

二、特性

  • 接口用关键字interface表示

    格式: interface 接口名 {}

  • 类实现接口用implements表示

    格式: class 类名 implements 接口名 {}

  • 接口不能实例化,需要按照多态的方式来实例化。

    如: 接口名 接口变量名 = new 类名();

  • 接口的子类
    1.可以是抽象类。但是意义不大。
    2.可以是具体类。要重写接口中的所有抽象方法。

三、接口的成员特点

​ 1.接口成员特点:
​ 成员变量:只能是常量,并且是静态的
​ 默认修饰符:public static final
​ 建议:自己手动给出。
​ 2.构造方法:接口没有构造方法。
​ 3.成员方法:只能是抽象方法。
​ 默认修饰符:public abstract
​ 建议:自己手动给出。

类与类,类与接口,接口与接口的关系
1.类与类:
继承关系,只能单继承,可以多层继承。
2.类与接口:
实现关系,可以单实现,也可以多实现
并且还可以在继承一个类的同时实现多个接口
3.接口与接口:
继承关系,可以单继承,也可以多继承

四、区分类和接口

​ 1.成员区别
​ 抽象类:
​ 成员变量:可以变量,也可以常量
​ 构造方法:有
​ 成员方法:可以抽象,也可以非抽象
​ 接口:
​ 成员变量:只可以常量
​ 成员方法:只可以抽象

​ 2.关系区别
​ 类与类
​ 继承,单继承
​ 类与接口
​ 实现,单实现,多实现
​ 接口与接口
​ 继承,单继承,多继承
​ 3.设计理念区别
​ 抽象类 抽象类中定义的是该继承体系的共性功能。
​ 接口 接口中定义的是该继承体系的扩展功能。

五、关键词总结

private

​ 1.private是一个权限修饰符,用来修饰成员变量和成员方法;

​ 2.私有是针对类,而不是针对对象,所以同一个类下的不同对象之间可以互相访问私有的成员;

​ 3.被私有的成员只在本类中有效。

this

​ this指向的是对当前对象的引用。

​ this()特指访问本类的构造方法,只能写在构造方法中,不能使用在普通方法中。

​ 不能在static中使用this。因为this是在创建对象之后才存在,而static方法在类加载时就存在了。

super

​ super代表了父类空间的引用,并不能代表对象,只是代表一个对象中的一块内存而已。

​ 在子类构造方法中第一句会默认存在一句super()调用父类的构造方法。

static

​ 1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来;

​ 2、被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来;

​ 被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的,一处变、处处变

​ 和静态变量、静态方法一样,静态代码块只再初始化的时候执行一次,而且优先于构造代码块和构造方法执行。当子类继承父类时,创建子类对象时会先执行父类静态代码块,再执行子类静态代码块,再对父类进行初始化,即执行父类的构造代码块和构造方法,最后对子类进行初始化,执行子类构造代码块和构造方法,

当存在多个静态资源时,静态资源加载的顺序是严格按照静态资源定义的顺序来加载的。

​ 如:

public class A
{
    private static int a = B();
    
    static
    {
        System.out.println("Enter A.static block");
    }
    
    public static void main(String[] args)
    {
        new A();
    }
    
    public static int B()
    {
        System.out.println("Enter A.B()");
        return 1;
    }
}

代码执行的结果是:

Enter A.B()
Enter A.static block

final

​ 1、被final修饰的类不可以被继承

​ 2、被final修饰的方法不可以被重写

3、被final修饰的变量不可以被改变

​ 其中,变量不可被改变指的是被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的

​ 如:在方法中定义private变量

public class FinalString
{
    private String str;
    
    public FinalString(String str)
    {
        this.str = str;
    }

    public String getStr()
    {
        return str;
    }

    public void setStr(String str)
    {
        this.str = str;
    }
}

​ fs为final修饰的变量,给fs的Str重新赋值,结果为2,重新赋值成功。

public class Test
{
    public static void main(String[] args)
    {
        final FinalString fs = new FinalString("1");
        fs.setStr("2");
        System.out.println(fs.getStr());
    }
}
当主函数修改为:
public class Test
{
    public static void main(String[] args)
    {
        final FinalString fs = new FinalString("1");
        final FinalString fs2 = new FinalString("2");
        fs = fs2;
    }
}

​ 结果报错,证明final修饰的变量的引用是不可变的,而引用指向的内容是可变的。

abstract

​ 如果一个类中至少有一个抽象方法,那么这个类一定是抽象类,但反之则不然。也就是说一个抽象类中可

​ 以没有抽象方法。这样做的目的是为了此类不能被实例化。

interface

​ 接口是可以多继承的,不能使用private和protected修饰接口。

​ 常量:接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。

​ 方法:接口的方法只能是抽象方法,总是使用,即使定义时不添加public abstract修饰符,系统也会自动加上。

extends

​ 继承。子类只能继承父类所有非私有的成员。

implements

​ 实现接口中定义的抽象方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值