java面向对象周测带答案

java面向对象周测带答案

一、简答题(每题5分,共计40分)
1.什么是类?什么是对象?类与对象的关系是什么?

类本质上就是分类的意思,也就是具有相同共性的一类事物的抽象描述。
类就是一种用户可以自定义的引用数据类型,用于包装描述属性的成员变量,和用于描述行为的成员方法,换句话说,类可以用于描述多个不同类型的数据。
类是一种抽象的概念,用于描述对象创建的模板,而对象是客观存在的实体,本质上就是内存空间中的一块区域,对象的数据结构取决于类。

2.请写出类、属性、行为的定义格式,以及引用和对象的定义格式。

class 类名{
数据类型 成员变量名;
返回值类型 方法名称(形式参数列表){
    方法体;
}
}
类类型 对象名 = new 类类型();

3.简述方法重载的概念、体现形式以及作用。

当同一个类中方法名相同,参数列表不同的方法之间 构成重载关系。 参数列表的体现形式有:参数个数的不同、参数类型不同、参数顺序不同。
方法的重载与返回值类型和形参变量名无关,但是建议尽量相同。
作用: 对于调用者来说,只需要记忆一个方法名就可以实现所有形式的调用。

4.this关键字的基本概念和常见使用方式是什么?

在构造方法中,this代表当前正在构造的对象。
在普通方法中,this代表当前正在调用的对象,也就是调用对象。
当形参名/局部变量和属性同名时,需要使用this关键字通过.来明确表示属性变量,从而提高代码的可读性和正确性,也就是用于区分同名的成员变量和形参以及局部变量。

5.基本数据类型和引用数据类型分别作为方法参数的效果是什么?。

当基本数据类型作为参数传递时,传递数据内容本身,因此形参改变不会影响到实参;
当引用数据类型作为参数传递时,传递的是引用记录的地址,因此形参指向的内容发生改变时,会直接对实参产生影响。
当引用数据类型作为参数传递后,若形参改变了指向再去改内容,则对实参无影响。。

6.简述封装的实现流程。

a.私有化成员变量,使用private关键字修饰;
b.提供公有的get成员变量和set成员变量方法,并在方法体中进行合理性的判断;
c.在构造方法中调用set成员变量的方法来确保合理性;

7.final关键字修饰类、方法以及属性各自的效果是什么?

final修饰的类表示该类不能被继承。
final修饰的方法不可以被重写,但可以被继承。
final修饰的成员变量必须被初始化,并且只能初始化一次。

8.简述多态的效果。

a.父类引用只能访问父类中的属性和方法。
b.父类引用不能直接访问子类中的属性和方法。
c.父类引用若想访问子类中的属性和方法,则进行强制类型转换,转换为子类变量调用
d.父类引用调用非静态的重写方法时,则调用子类中的版本;
调用静态的重写方法时,则调用父类中的版本。

二、编程题(13题每题10分,45题15分,共计60分)
1.自定义方法将一整数逆序后放入一数组中(要求递归实现)如:1234 变为 {4,3,2,1}。

public void NO1(int num,int[] arr,int i) {
        if(num>0) {
            arr[i] = num%10;
            i++;
            NO1(num/10,arr,i);
        }else {
            return;
        }
    }

2.编程实现两种形式(饿汉式和懒汉式)的单例模式。

//懒汉式单例模式
public class text {

    //设立静态变量
    private static text tt = null;

    private text(){
        //私有化构造函数
        System.out.println("懒汉式单例模式");
    }

    //开放一个公有方法,判断是否已经存在实例,有返回,没有新建一个在返回
    public static text getInstance(){
        System.out.println("懒汉式单例模式");
        if(tt == null){
            System.out.println("懒汉式构造函数的实例当前并没有被创建");
            tt = new text();
        }else{
            System.out.println("懒汉式构造函数的实例已经被创建");
        }
        System.out.println("方法调用结束,返回单例");
        return tt;
    }
}

//饿汉式单例模式
public class text2 {

    //设立静态变量,直接创建实例
    private static text2 tt = new text2();

    private text2(){
        //私有化构造函数
        System.out.println("饿汉式单例模式");
    }

    //开放一个公有方法,判断是否已经存在实例,有返回,没有新建一个在返回
    public static text2 getInstance(){
        System.out.println("饿汉式单例模式");
        return tt;
    }
}

3.编程实现以下需求:
自定义狗类,属性有:名字、牙齿数量,行为有:吃食物、看家。
自定义猫类,属性有:名字、颜色,行为有:吃食物、抓老鼠。
自定义测试类,自定义成员方法实现既能打印狗又能打印猫的所有特征,在main()方法中调用即可。

package text;
    public class an {
        private String  name;
        public an() {
        }
        public an(String name) {
            setName(name);
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void show() {
            System.out.println("名字: "+getName()+"吃食物");

        }
    }
package text;

public class cat extends an{
    private String color;
    public cat(String name,String color) {
        super(name);
        setColor(color);
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public void show() {
        System.out.println("名字: "+getName()+"颜色: "+getColor()+"吃食物");

    }
    public void work() {
        System.out.println("抓老鼠");
    }
}
package text;

public class dog extends an{
    private int ya;
    public dog(String name,int ya) {
        super(name);
        setYa(ya);
    }
    public int getYa() {
        return ya;
    }
    public void setYa(int ya) {
        this.ya = ya;
    }
    public void show() {
        System.out.println("名字: "+getName()+"牙齿: "+getYa()+"吃食物");

    }
    public void work() {
        System.out.println("看家");
    }
}
package text;

public class text {
    public static void print(an an) {
        an.show();
        if(an instanceof cat) {
            cat cc= (cat)an;
            cc.work();
        }else if (an instanceof dog) {
            dog dd=(dog)an;
            dd.work();
        }
    }
    public static void main(String[] args) {
        print(new cat("猫","白色"));
        print(new dog("狗", 18));
    }
}

4.编程实现以下需求:
自定义Accout类实现封装,特征有:账户余额,要求提供计算利息兵返回的抽象方法。
自定义FixedAccount类继承Account类并重写抽象方法,在main()方法中使用多态方式构造对象并设置账户余额为2000,最后计算利息并打印出来。

package t;ext

public abstract  class  Accout {

    private int money;
        public Accout() {

        }
        public Accout(int money) {
            setMoney(money);
        }
        public int getMoney() {
            return money;
        }
        public void setMoney(int money) {
            this.money = money;
        }
        public abstract double getLi();
    }
package text;

public class FixedAccount extends Accout{

    public FixedAccount(int i) {
        super(i);
    }

    @Override
    public double getLi() {

        return getMoney()*0.03;
    }
    public static void main(String[] args) {
        Accout ac = new FixedAccount(2000);
        double as = ac.getLi();
        System.out.println("利息: "+as);
    }

}

5.编程实现以下需求:
自定义TestInterfaceA接口,提供一个打印1~20之间所有奇数的抽象方法。
自定义TestInterfaceB接口,提供一个打印1~20之间所有偶数的抽象方法。
自定义SubAB类实现上述两个接口并重写抽象方法,在main方法中使用多态语法 格式创建对象并调用两个方法实现打印。

package text;

public interface A {
    public abstract void show();
}
package text;

public interface B {
    public abstract void print();
}

    package text;

public class AB {

    public static void text(A a) {
        a.show();
    }
    public static void text1(B b) {
            b.print();
        }
    public static void main(String[] args) {

            AB.text(new A() {

                @Override
                public void show() {
                    for (int i = 0; i < 20; i++) {
                        if(i%2==1) {
                            System.out.println(i);
                        }

                    }
                }
            });

            AB.text1(new B() {

                @Override
                public void print() {
                    for (int i = 1; i < 20; i++) {
                        if(i%2==0) {
                            System.out.println(i);
                        }
                    }
                }
            });
}
}

原文地址:https://www.cnblogs.com/kindsong/p/9759613.html

时间: 2024-10-10 22:14:26

java面向对象周测带答案的相关文章

java基础知识周测试题带答案

简单题(每题5分,共计50分) 简述Java语言跨平台的原理 Java跨平台的特性,也就是同一份字节码文件可以在不同的系统上执行, 由不同系统中的Java虚拟机负责翻译成对应的机器指令. 写出以下名词的概念和各自作用 jre - Java运行时环境信息,只要运行Java编写的应用程序就需要安装. jdk - Java开发工具包,只要编写Java应用程序就需要安装,该工具包中包含了jre. jvm - Java虚拟机,将字节码文件解释为机器指令. javac.exe - Java编译器,用于将高级

java面向对象入门之带参方法创建

/* Name :创建带参的方法 Power by :Stuart Date:2015.4.25 */ //创建Way类 class Way{ //Way类成员的基本变量 int add1=123; int add2=456; //创建一个add方法,带参数两个,都是INT类型 public void add(int i,int n){ System.out.println(i+n); } } public class wayTest{ public static void main(Strin

BAT美团滴滴java面试大纲(带答案版)之四:多线程Lock

每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 这是多线程的第二篇. 多线程就像武学中对的吸星大法,理解透了用好了可以得道成仙,俯瞰芸芸众生:而滥用则会遭其反噬. 在多线程编程中要渡的第二个"劫",则是Lock.在很多时候,包括面试.包括实际项目应用,我们都会拿来和synchronized对比一番. 我们知道,多线程的核心思想是通过增加线程数量来并发的运行,来提高效率,也就是数量决胜论,而不是质量决胜(提高每个线程的处理

java笔试题大全带答案

1.&和&&的区别 答:?&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 2.Collection 和 Collections的区别 答:?Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作 3.数组有没有length()这个方法? String有没有length()这个方法 答:?数组没有len

Java+面向对象初学感想

在先导课之前我未曾接触C和Python之外的语言,在大一学年的课程中,用面向过程的思想方法足以完成绝大多数课程要求,故而我也对面向对象的编程思想知之甚少,虽然多有耳闻但是对它一直没有一个正式的学习了解也没有任何直观感受过.因此,在第一节先导课上,第一次真的去了解到面向对象的思想感觉是很新鲜甚至有点惊叹的.而对于java,在上课之前心里其实是有点畏惧的,毕竟有的代码比起C语言来说要多打很多字(System.out.println....),但上完第一节课后,我对Java的好感度一下子就被提高了不少

Java面向对象程序设计--与C++对比说明:系列2(类机制)

1. Java中的包机制(Package): 1.1   Java容许将一系列的类组合到一个叫package的集合中.package机制是一种非常好的管理工作的方式并可以将你自己的工作和系统或第三方提供的代码分开. 一个类(class)可以使用其本身所在包中的任何类和其他包中的任何public类. 注意:只能使用*号来导入一个单独的包中的所有的类.像这种java.*或java.*.*形式的包的导入都是错误的. 例如:有两个包com.a.b和com.a.b.c,那么com.a.b.*导入的类将不包

献给 2018 还在艰苦奋斗的 Java 程序员,Java 常见面试题及答案!

1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被编译成能被 Java 虚拟机执行的字节码文件. Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译. Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性. 2.JDK和JRE的区别是什么? JDK: java开发工具包,包含了JRE.编译器和其它工具(如:jav

实验二:Java面向对象程序设计

实验二 Java面向对象程序设计 目录 [一.单元测试和TDD](#first) [任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能](#firstTask) [任务二:以TDD的方式研究学习StringBuffer](#SecondTask) [二.面向对象三要素:封装.继承.多态](#Second) [任务三:使用StarUML对实验二中的代码进行建模](#ThirdTask) [三.设计模式](#third) [任务四:对MyDoc类进行扩充,让其支持Lon

第5篇-JAVA面向对象Ⅰ

第5篇-JAVA面向对象Ⅰ 每篇一句 :面向对象面向君,不负代码不负卿 初学心得: 代码虐我千百遍,我待代码如初恋 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-03| JAVA面向对象 Ⅰ] 1.JAVA作为一种面向对象语言,具有以下基本概念: ● 多态 ● 继承 ● 封装 ● 抽象 ● 类 ● 对象 ● 实例 ● 方法 ● 重载 2.面向对象 什么是面向对象?: 面向对象是一种编程思想 通俗的说:面向对象是一种思考问题的思维方式 为什么使用面向对象以及它的作用 计算机语