memo:java接口的实现等

1. 接口 

有接口A,下面的几种写法中哪些没有错误?

    public interface A { public void m1(); }

    class B implements A { }    // The type B must implement the inherited abstract method A.m1()
    class C implements A { public void m1() { } }
     class D implements A { public void m1(int x) { } } //The type D must implement the inherited abstract method A.m1()
    abstract class E implements A { }
    abstract class F implements A { public void m1() { } }

    abstract class G implements A { public void m1(int x) { } }


由此可知,虚类实现接口,不实现其相应方法也没关系。最终只要在实现类里面有接口的方法即可。


2. instanceof运算符

instanseof运算符是判断对象是不是指定类的实例。

public interface A { public void m1(); }

class C implements A { public void m1() { } }

class D extends C {  }


D d = new D();


 d instanceof D

 d instanceof C

 d instanceof A

都为true。也就是说对象判断的时候,生成类以及生成类的父类都ok。


3. 继承的构造函数

class  A { public A(String a) { } }

class B extends A { public B() { } }   //编译错误,因为没有初始化父类。

class B extends A { public B() {super("aa") } }  或者 class B extends A { public B() {this("aa") } }  都可以。


4. 方法的保护权限

public interface A { void m1(); }

class C implements A { public void m1() { } }  //OK

class C implements A { protected void m1() { } }  //NG,不可见,把父类的方法权限放小了。

class C implements A { void m1() { } }  //NG,不可见,把父类的方法权限放小了。

class C implements A { private void m1() { } }  //NG.把父类的方法权限放小了。

接口中只能声明public,或者没有修饰符的方法。

子类中只能和父类的方法的权限保持一致,或者扩大父类的方法的权限。而不能够缩小父类的方法的权限。

类继承的时候,private,final的方法是不能够被重载的。


补充:JAVA修饰符的简介(自己懒得整理,来自网络)

                     类内部     package内        子类         其他
public             允许         允许                 允许         允许
protected       允许         允许                 允许         不允许
default           允许         允许                 不允许     不允许
private           允许         不允许             不允许     不允许

比如:用protected修饰的成员(变量或方法),在类内部可以调用,同一个package下的其他类也可以调用,子类里也可以调用,其他地方则不可以调用,也就是说在其他

Java语言定义了public、protected、private、abstract、static和final这6常用修饰
词外还定义了5个不太常用的修饰词,下面是对这11个Java修饰词的介绍:
1.public
使用对象:类、接口、成员
介绍:无论它所处在的包定义在哪,该类(接口、成员)都是可访问的
2.private
使用对象:成员
介绍:成员只可以在定义它的类中被访问
3.static
使用对象:类、方法、字段、初始化函数
介绍:成名为static的内部类是一个顶级类,它和包含类的成员是不相关的。静态方法是类方法,
是被指向到所属的类而不是类的实例。静态字段是类字段,无论该字段所在的类创建了多少实例,该字段只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行的,而不是在创建实例时执行的。
4.final
使用对象:类、方法、字段、变量
介绍:被定义成final的类不允许出现子类,不能被覆盖(不应用于动态查询),字段值不允许被修改。
5.abstract
使用对象:类、接口、方法
介绍:类中包括没有实现的方法,不能被实例化。如果是一个abstract方法,则方法体为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类
6.protected
使用对象:成员
介绍:成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是该成员所属类的子类。
7.native
使用对象:成员
介绍:与操作平台相关,定义时并不定义其方法,方法的实现被一个外部的库实现。
8.strictfp
使用对象:类、方法
介绍:strictfp修饰的类中所有的方法都隐藏了strictfp修饰词,方法执行的所有浮点计算遵守IEEE   754标准,所有取值包括中间的结果都必须表示为float或double类型,而不能利用
由本地平台浮点格式或硬件提供的额外精度或表示范围。
9.synchronized
使用对象:方法
介绍:对于一个静态的方法,在执行之前jvm把它所在的类锁定;对于一个非静态类的方法,执行前把某个特定对象实例锁定。
10.volatile
使用对象:字段
介绍:因为异步线程可以访问字段,所以有些优化操作是一定不能作用在字段上的。volatile有时可以代替synchronized。
11.transient
使用对象:字段
介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值