sun认证备考学习笔记系列--声明和访问控制(2)

接口实现

        接口是类能够做什么的合约,但它们没有指定类操作的实现方式!

        接口能够被继承树中的任何类实现

        接口就像一个百分百抽象类,无论是否对其在声明中使用了abstract修饰符,它隐含是抽象的

        接口只能有抽象方法,不允许有具体方法

        接口默认是公共的和抽象的,这些修饰符的显式声明是可选的

        接口可以有常量,它们隐含是                public,static和final

        public,static和final接口常量声明可以选择任意组合

        合法的非抽象实现类具有以下属性:

            它为来自接口的所有方法提供具体实现

            对于它实现的方法,必须符合所有的合法重写规则

            它一定不能为实现方法声明任何新的检查异常

            它一定不能声明比接口方法中所声明异常更宽的检查异常

            无论接口声明如何,它都可以在任何接口方法实现上声明运行时异常

            它必须包含与它所实现方法完全相同的方法签名和返回类型(但不必声明该接口的异常)

        实现接口的类自身可以是抽象的

        抽象实现类不必实现接口方法(但是第一个具体子类必须实现)

        类只能扩展一个类,但是它能实现多个接口

        接口能够扩展一个或多个其他接口

        接口不能扩展类,或实现一个类或接口

        

成员访问修饰符

        方法和实例变量(非局部)称为“成员”

        成员可以使用四个访问级别:public ,private,protected和默认

        成员访问有两种形式:

            类中的代码能够访问另一个类中的成员

            子类能够继承其超类中的成员

        如果不能访问类则不能访问其成员

        要在确定成员可见性之前确定类可见性

        公共成员能够被其他所有类访问,甚至是不同包中的类

         如果超类成员是公共的,那么无论在哪个包中,子类都继承它

        不用.运算符访问的成员必须在同一个类中

         this.总是只想当前执行的对象

        this.aMethod与只调用 aMothod完全相同

         私有成员只能被同一个类中的代码访问

        私有成员对子类是不可见的,因此不能继承私有成员

        默认和保护成员的区别只是在子类被调用时;

            默认成员只能被处于同一个包中的其它类访问

            保护成员能够被同一包中的其他类访问,也能被任意包中的子类访问

            保护=包+子孙

            对于包外子类,只能通过继承访问保护成员;包外子类不能通过使用对超类实例的引用来访问保护成员;

            实际上,子类从其他包继承的保护成员对其他类来说都是私有的

            

局部变量

        局部变量声明不能有访问修饰符

        final是唯一可用与局部变量的访问修饰符

        局部变量没有默认值,因此在使用之前必须将其初始化

 

其他修饰符--成员

        final方法在子类中不能重写

        abstract方法用分号结束,而不是大括号

        有三种方法识别非抽象方法

            该方法没有标示为abstract

            该方法有大括号

            该方法在两个大括号之前有代码

        扩展abstract的第一个非抽象类必须实现所有abstract类的abstract方法

        synchronized修饰符只能用于方法和代码块

         synchronized方法能够具有任何访问控制,包括final

        抽象方法必须被子类实现,基于这种原因,所以:

            abstract方法不能是私有的

            abstract方法不能是final

        native修饰符只能应用与方法

        strictfp修饰符只能应用与类和方法

 

具有var-arg的方法

        从JAVA5开始,方法可以声明一个接受零个或多个的形数,即所谓的var-arg方法

        var-arg是用语法type...name声明的,例如doStuff(int...x){}

        var-arg方法只能带一个var-arg形参

        在带有正常形参和一个var-arg形参的方法中,var-arg形参必须出现在最后面

        

变量声明

        实例变量能够--

            具有任何访问控制

            被标示为final或transient

        实例变量不能被标示为abstract,synchronized,native和strictfp

        用与实例变量系那个痛的名称声明局部变量是合法的,这被称作“隐藏”

        最终变量具有以下属性:

            一旦赋值之后,最终变量不能被重新初始化

            一旦将对象赋予最终变量,则最终引用变量不能再引用不同的变量

            在构造函数完成前,最终变量必须完成初始化

        根本没有final对象这种说法,标示为final的引用不是指该对象自身是不可变的

        transient修饰符只能用于实例变量

        volatile修饰符只能用与实例变量!

        

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值