抽象类和接口习题.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
、易错概念题
1.以下方法错误的是(A D)
A覆盖方法包括成员方法的覆盖和成员变量的覆盖
B成员方法的覆盖是多态的一种表现形式
C子类可以调用父类中被覆盖的方法
D任何方法都可以被覆盖
分析:在子类中调用父类方法使用super关键字。super, a0就可以调用父类的
a方法。
在类继承或者接口实现过程中就会涉及到成员属性以及成员函数的重写,需要注意的是,成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是不会进行覆盖的。
如果子类本身没有定义使用this关键字可以去访问父类的成员变量。
最后final修饰的方法不能被覆盖覆盖即重写和重载一起都是多态的表现形式。
(重载、重写和覆盖)
override-〉重写(=覆盖)、overload-〉重载、polymorphism -> 多态
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在
继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符
(public>protected>default>private)。
3、重写的方法的返回值类型必须和被重写的方法的返回一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法, 并没有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。
overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名
称相同而参数形式不同。
重载的规则:
1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
对比:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;
如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。
2.下面说法正确的是(C H)
A instanceof关键字用来判定某个类是否为抽象类。
B final关键字修饰的成员变量不需要初始化。
C接口的方法都是抽象方法(jdkl. 8之前),并且没有方法体
D当我们继承一个抽象类时,我们必须要实现抽象类的抽象方法。(X)
E在向上转型的过程中,如果父类和子类拥有相同的名字的成员方法(非静态)访问的是子类的该方法。如果父类和子类拥有名字的成员变量时,访问的是子类的成员变量。(X)
F内部类访问外部类方法时,不用创建外部类对象直接访问外部类方法。
G内部类变量不能设置为static (可以),也不能设置为final
H多态通常用来作为参数传入或者作为返回值返回。
3.下面说法不正确得是(A C D E)
A不能和abstract —起使用的修饰符有static final public final
B抽象类之间是继承关系,接口之间也是。
C接口不能存在普通方法和常量
D局部内部类public, private修饰符修饰default/static
E接口不可以直接实例化,抽象类可以
4.下面有那些选项是对的(B C E)
A instanceof是一个二元修饰符,作用是用来判断左边的对象是否是右边类的实例,返回的是布尔类型
B private protected和static都不可以修饰interface接口(接口的修饰符只有 public)
C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
D对象是对类的抽象化
E接口中可以有常量
分析接口可以有常量(jdkl. 8以后)instanceof是一个二元修饰符,作用是用来判断左边的对象是否是右边类的实例或者是右边超类的实例
5.以下说法正确的是(B )
对于方法内得形参()
A必须定义多个形参
B可以没有
C至少有一个
D只能是简单变量
6.以下说法正确的是(C )
A对于局部内部类,不能在class前加任何修饰符(public default private protected)来修饰(static好像可以)
B只要没有定义不带参数的构造函数,JVM都会为类生成一个默认的构造函数
C向上转型中,父类与子类拥有相同名字的普通方法时,访问的是子类的成员方
法
D单例模式中类的构造方法使用private修饰,声明为私有,这样就不能在类的
外部使用new关键字来创建实例对象了
7.final修饰的方法不可重写的(子类不能重写父类final方法,但是可以调用)
8.以下说法正确的是(E G)
A抽象方法是一种功能契约(功能契约即为接口),不实现抽象方法就无法构造
对象
B接口中的抽象方法只能是public的,而抽象类中的抽象方法可以用别的修饰
符修饰(还可以是protected)
C类是对象的抽象模型,刻画了对象中所有信息
D抽象方法不能用final来修饰,可以用satic来修饰
E对计算公式已不需要更改的数学函数,常用public static final来修饰;
F若类中有final abstract来修饰的方法,必须实现该方法才能构造对象。
G引用是对象的名字,引用值是对象的起始地址
9.下列的说法错误的是(B)
A抽象类必须被子类继承
B对象向上转型以后,拥有相同名字的普通成员变量(静态变量)时,访问的是
子类里面的
C super的主要功能是完成子类的调用父类的内容,并且只能放在子类构造方法
的第一行
D接口的方法必须定义为public权限,并且只能是抽象方法(不考虑jdkl.8)
10.下面那些选项是错误的(A B D E)
A instanceof是一个二元操作符,只用来判断左边的对象是否是右边的类的实例,返回是布尔型(还可以判断是否是右边父类的实例)
B成员内部类可以使用任何修饰符修饰,可以定义常量和静态变量
C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
D在成员方法里面叫做局部内部类,可以访问外部类属性和使用任何修饰符,但
使用局部内部类方法时,必须实例化内部类对象
E实现内部类的调用,要直接实例化内部类
11下列定义,正确的有哪些(A B C D)
A接口只能做方法声明,抽象类中就可以做方法实现和方法声明
B抽象类中的抽象方法只能声明,不能实现.abstract void abc ():不能加{}
C抽象方法要被实现,所以不能是静态的,也不能是私有的
D接口里只能有公共方法,1.8以后可以有普通方法和成员变量
E类实现接口,利用关键字implement完成(错误注意为implements)
12以下说法不正确的有(BCD) A拥有抽象方法的类为抽象类
B抽象类的方法时抽象方法