Java实训【OOP】-面向对象考试题库整理

一、对象和类

  • 修饰符混用:
    • abstract不能与final并列修饰同一个类
    • abstract类中可以有private的成员
    • abstract方法可以放在abstract类或接口中
    • static方法中能直接使用非static的属性(×)改:静态方法中不能引用其外部的非静态成员
  • 静态块是类加载的时候就会被执行到的,静态执行顺序是按照在类中出现 的先后顺序执行
  • 构造方法没有返回类型
  • 静态变量可以通过类名调用
  • .java文件中先使用package关键字,其次使用import关键字,最后使用class关键字
  • 常量是public final修饰的,例:public final int MAX_LENGTH=100;
  • 在子类构造方法的开始默认情况下有一句super();来调用父类的构造方法
  • 对于顶层类(外部类)来说,只有两种修饰符:public和默认(default)。
    因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。 因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。 但是private可以修饰class的,只不过该类不能使顶层类,可以是内部类。内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。 当一个内部类使用了private修饰后,只能在该类的外部类内部使用
  • 在类方法中不能使用this关键字;在类方法中可以调用其它类中的类方法;在类方法中可以通过实例化对象调用实例方法;在类方法中调用本类的类方法时可直接调用
  • 面向对象的三大主要特征是:封装、多态、继承
  • 下面哪个函数是public void method(){...}的重载函数( )
    A.public void method(int m){...}
    B.public int method(){...}
    C.public void method2(){...}
    D.public int method(int m, float f){...}
    【正确答案】A,D
    【答案解析】重载:方法名相同且参数列表不同,与返回值类型无关
  • 下面选项中哪两个可以在A的子类中使用( )
    class A {
    	protected int method1 (int a, int b) {
    		return 0;
    	}
    }
    
    A.public int method1(int a, int b) { return 0; }
    B.private int method1(int a, int b) { return 0; }
    C.private int method1(int a, long b) { return 0; }
    D.public short method1(int a, int b) { return 0; }
    【正确答案】A,C
    【答案解析】B选项中,子类重写父类的方法,访问权限不能降低;C选项中,属于重载;D选项中,子类重写父类的方法如果返回值类型是基本类型的话,要求相同
  • 使用this调用本类中其它的构造方法
  • 变量及其范围:
    • 类中的普通属性是类的实例变量
    • 实例变量用关键字static声明 (×)改:由static修饰的变量称为类变量或是静态变量
    • 局部变量作用域只在局部范围内部
    • 局部变量在使用前必须被初始化
  • 已知下列选项中的方法是在某个类中定义的,现在子类中不可以定义与下列选项中方法签名相同的方法的选项是( )
    A.final void methoda() {}
    B.void methoda() {}
    C.static void methoda() {}
    D.static final void methoda() {}
    【正确答案】A,D
    【答案解析】final修饰方法,在子类中不能被重写
  • 如果package语句存在,则必须出现在源文件的非空白首行;如果在源文件中声明了一个public接口,则其名称必须和源文件名一致;import是写在package下;选项main方法可以放在类里任意一个地方
  • 实例方法和类方法:
    • 实例方法只能访问实例变量(×)改:实例方法可以访问类变量
    • 类方法既可以访问类变量,也可以访问实例变量 (×) 改:类方法只能访问类变量
    • 类方法只能通过类名来调用(×)改:类方法可以通过对象调用
    • 实例方法只能通过对象来调用
  • 在创建对象时,必须对象是先声明,声明后会在给对象在内存里开辟空间,之后初始化,再进行使用
  • 本类实例方法不可以调用其他类的私有实例方法;本类实例方法不可以调用其他类的私有类方法;本类实例方法不可以直接通过方法名调用其他类的实例方法;本类中实例方法可以直接通过方法名调用本类中其他实例方法
  • instanceof是 Java 的一个二元操作符,它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。TeahcerStudent之间没有继承关系不能做强制类型转换
  • 构造方法的作用是在实例化对象的时候给属性成员进行初始化;类中如果没有显示的给出构造方法,系统会提供一个无参构造方法;构造方法与类同名,类中可以有和类名相同的方法;构造方法可以重载
  • 面向对象概念:
    • 程序中的对象是一种数据信息,并非现实中的实际物体
    • 在现实生活中,对象是指客观世界的实体
    • 在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(class
    • 在程序中,对象是一组变量和相关方法的集合

二、JAVA内存管理

  • 内存回收(负责释放无用内存):垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用 System.gc()方法来"建议"垃圾收集器去进行垃圾回收处理,但其是否可以执行,什么时候执行却都是不可知的。
  • Java语言中,程序为对象动态分配内存。Java中内存分配的运算符是new
  • 栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表,即存取受限的线性结构

三、继承

  • 当子类隐藏了父类的变量,并重写了父类方法后,又要使用父类变量或父类被重写的方法时,可通过super来实现对父类变量的访问和对父类方法的调用。super是用来引用当前对象的父类
  • Java规定,子类只能有一个父类而父类可以有多个子类
  • 在下面程序的第7行补充上下列哪个方法,会导致在编译过程中发生错误( )
    1)  class Super {
    2)    public float getNum() {
    3)      return 3.0f;
    4)    }
    5)  }
    6)  public class Sub extends Super {
    7)    // TODO ...
    8)  }
    
    A.public float getNum(){retun 4.0f;}
    B.public void getNum(){}
    C.public void getNum(double d){}
    D.public double getNum(float d){retun 4.0f;}
    【正确答案】B
    【答案解析】方法重写、重载的问题:重写要求方法签名完全相同,返回值类型如果是基本类型或无返回值时必须一致。重载要求方法名相同且参数列表必须不同,与返回值类型无关
  • 重载,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法
  • 下列代码执行的结果是()
    class Base {
    	void test() { 
    		System.out.print("Base.test()");
    	}
    }
    class Child extends Base { 
    	void test() {
    		System.out.print("Child.test()");
    	}
    	static public void main(String[] a) {
    		Child anObj = new Child();
    		Base baseObj = (Base)anObj;
    		baseObj.test();
    	}
    }
    
    A.Child.test()Base.test()
    B.Base.test()Child.test()
    C.Base.test()
    D.Child.test()
    【正确答案】D
    【答案解析】测试代码相当于:Base baseObj = new Child();父类的引用指向子类的实例,子类又重写了父类 的test()方法,因此调用的是子类的test()方法
  • 方法重写返回值类型如果是基本类型应与父类的一致

四、访问控制

区分Java中作用域【public、private、protected以及不写】可点击本处

  • private修饰的变量说明变量为私有访问。只能被该类自己访问或调用,是对成员变量的高级保护
  • 静态方法中可以直接调用使用其外部的静态成员
  • 已知A类在package A中, B类在package B中,且B类被声明为public,且有一个成员变量x被声明为protected控制方式。C类也位于package A包中,且继承了B类。则以下说法正确的是( )
    A.A类的实例不能访问到B类的实例
    B.A类的实例能够访问到B类一个实例的x成员
    C.C类的实例可以访问到B类一个实例的x成员
    D.C类的实例不能访问到B类的实例
    【正确答案】C
    【答案解析】不同包子类的关系, 可以访问到父类Bprotected成员
  • 抽象方法不能有方法体;方法中定义的是局部变量,不能用类成员变量修饰符privatefinal修饰为常量,常量的值不能被改变
  • 接口中的属性都是常量,默认由public、static、final以及省略修饰,abstract不能修饰
  • 属性的可见性有四种:公有的(public)、保护的(protected)、默认的(default)、私有的(private)

五、抽象类

  • 实现Runnable接口,接口中有一个抽象方法run,实现类中重写该方法,且该方法是public修饰的
  • abstract可以修饰方法和类,不能修饰属性。抽象方法没有方法体,即没有大括号{}
  • 抽象方法不可以是静态的,不可以有方法体,不可以在普通类中定义,可以在接口中和抽象类中定义
  • 已知如下代码,下列选项中哪个表达式会编译出错( )
    interface IFace{}
    class CFace implements IFace{}
    class Base{}
    public class ObRef extends Base{
    	public static void main(String argv[]){ 
    		ObRef ob = new ObRef();
    		Base b = new Base(); 
    		Object o1 = new Object(); 
    	    IFace o2 = new CFace();
    	}
    }
    
    A.o1=o2;
    B.b=ob;
    C.ob=b;
    D.o1=b;
    【正确答案】C
    【答案解析】bob的父类,将父类引用赋值给子类型变量上需要强制类型转换
  • 抽象方法不可以是静态的,不可以有方法体,不可以在普通类中定义,可以在接口中和抽象类中定义

六、接口类

  • Java支持单重继承,一个类只能继承自另外的一个类,但是一个类可以实现多个接口
  • 在Java中,已定义两个接口BC,要定义一个实现这两个接口的类,例:class A implements B,C
  • java8以前,接口只能被类实现,类不能继承接口,遵循单继承多实现原则,接口中只能定义常量和抽象方法
  • java8以后,接口中可以包含静态方法和默认方法
  • 接口中不可以有private的方法;接口中不可以有final的方法 接口中的方法默认是public abstract的;接口中的方法不可以有实现;接口可以继承其他接口
  • 接口是一种只含有抽象方法或常量的一种特殊的抽象类,因为接口不包括任何实现,所以与存储空间没有任何关系
  • 不能用来修饰interface的有( )
    A.private
    B.public
    C.protected
    D.static
    【正确答案】A,C,D
    【答案解析】修饰接口可以是public和默认
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值