面试题四(抽象类、接口)

一、选择题
1.下面哪几个函数是public void example(){…}的重载函数? AD
A、 public void example( int m){…}
B、public int example(){…}
C、public void example2(){…}
D、 public int example ( int m, float f){…}
//重载:方法名相同,参数不同

4.已知如下类定义:
class Base {
public Base (){ //… }
public Base ( int m ){ //… }
protected void fun( int n ){ //… }
}
public class Child extends Base{
// member methods
}
如下那些方法重写时可以正确地加入子类中? CD
A、private void fun( int n ){ //…}
B、void fun ( int n ){ //… }
C、protected void fun ( int n ) { //… }
D、public void fun ( int n ) { //… }
//重写:子类方法的权限可以等于或大于父类,返回值类型、方法名和参数必须一致

6.运行下列程序,结果是 A
class Base{
public static void print(){
System.out.println(“Base”);
}
}
class Inherit extends Base{
public static void print(){
System.out.println(“Inherit”);
}
}
public class Print{
public static void main(String[] args){
Base base=new Base();
Base in=new Inherit();
base.print();
in.print();
}
}
A:Base,Base B:Inherit,Inherit C:Base,Inherit D:Compilation error
//静态方法不能被重写,不具有多态性,所以两个都是Base,哪个类引用就调用哪个类的方法

10 如果类中的成员变量可以被同一包访问,则使用如下哪些修饰符? BCD
A、 private B、public C、protected D、no modifier E、final
//no modifier就是默认没有定义

13、指出下列程序的运行结果:D
public class Static{
static{
int x=5;
}
static int x,y;
public static void main(String args[]){
x–;
myMethod();
System.out.println(x+y + ++x);
}
public static void myMethod(){
y=x++ + ++x;
}
}

A compiletime error
B prints:1
C prints:2
D prints:3
E prints:7
F prints:8
//静态代码块里的x,y是局部变量,与成员变量无关

14、下面哪个语句是创建数组的正确语句?ACD
A、float f[][] = new float[6][6];
B、float f[][] = new float[][6];
C、float [][]f = new float[6][6];
D、float [][]f = new float[6][];
//float f[][]是老式写法,float [][]f = new float[6][]也是正确的,二维数组只要定义了长度就行

二、问答题
1.abstract class和interface有什么区别
(1)抽象类可以有构造方法,接口中不能有构造方法。
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量
(3)抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
(4)抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
(5)抽象类中可以包含静态方法,接口中不能包含静态方法
(6)抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
(7)一个类可以实现多个接口,但只能继承一个抽象类。

2.简述final的作用
(1)final修饰的变量是常量
(2)final修饰的方法不能被重写
(3)final修饰的类不能被继承
(4)final修饰的对象的地址(引用)不能改变,但是对象的值可以改变。

3.switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String
在switch(xxx)中,xxx只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。
long不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
能作用在String。

三、编程题
写一个Singleton模式的例子

概念:单例模式(Singleton Pattern)涉及一个单一的类,确保只有单个对象被创建。这个类提供一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。
饿汉式单例模式:类加载时就创建单实例

package singleton;

/**
 * 饿汉式单例模式
 */
public class Singleton {

    //创建一个Singleton的对象
    private static Singleton instance = new Singleton();

    //私有化构造函数,这样类就不会被实例化
    private Singleton(){

    }

    //获取唯一一个可用的对象
    public static Singleton getInstance(){
        return instance;
    }

    public void show(){
        System.out.println("饿汉式单例模式!");
    }
}
package singleton;

/*
饿汉式测试类
 */
public class SingletonTest {

    public static void main(String[] args) {

        //获取唯一可用的对象
        Singleton object = Singleton.getInstance();

        //显示消息
        object.show();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33591873/article/details/107457879
今日推荐