第二阶段面向对象扩展加强训练习题.docx

上传人:b****5 文档编号:7665458 上传时间:2023-01-25 格式:DOCX 页数:29 大小:24.38KB
下载 相关 举报
第二阶段面向对象扩展加强训练习题.docx_第1页
第1页 / 共29页
第二阶段面向对象扩展加强训练习题.docx_第2页
第2页 / 共29页
第二阶段面向对象扩展加强训练习题.docx_第3页
第3页 / 共29页
第二阶段面向对象扩展加强训练习题.docx_第4页
第4页 / 共29页
第二阶段面向对象扩展加强训练习题.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

第二阶段面向对象扩展加强训练习题.docx

《第二阶段面向对象扩展加强训练习题.docx》由会员分享,可在线阅读,更多相关《第二阶段面向对象扩展加强训练习题.docx(29页珍藏版)》请在冰豆网上搜索。

第二阶段面向对象扩展加强训练习题.docx

第二阶段面向对象扩展加强训练习题

面向对象加强补充扩展作业

理论题

1.局部变量和成员变量的区别:

A、在位置上:

成员变量:

在类中方法外;

局部变量:

在方法中或者方法声明上

B、在内存中:

成员变量:

在堆内存中

局部变量:

在栈内存中

C、生命周期:

成员变量:

随着对象的创建而存在,随着对象的消失而消失;

局部变量:

随着方法的调用而存在,随着方法的调出完毕而消失

D、默认初始化值:

成员变量:

有默认的初始化值;

局部变量:

没有初始化值,必须赋值之后才能使用

2.变量的使用顺序?

3.类和对象的关系?

1、类是一组相关属性和行为的集合

2、对象是该类事物的个体体现;

3、类是抽象的具体的或者是类是一般的,对象是特殊的

4、类中可以包含成员变量、类变量、成员方法、类方法、构造函数、构造代码块儿、静态代码块

4.java描述事物最基本的单位?

5.什么叫面向对象?

强调的对象,不断的创建对象,使用对象,强调对象的方法做事情;

6.什么是封装?

封装的原则?

好处?

封装是隐藏属性和其实现细节,只提供对外公共访问方式;

隐藏属性和实现细节,只提供对外公共访问方式

好处:

1、提高代码的复用性;2、提高代码的维护性;

7.封装就是私有,对吗?

为什么?

不对,私有只是封装的一种,

8.Java中参数传递的问题:

传递基本数据类型和引用数据类型区别?

9.构造方法,set方法都可以给成员变量赋值,这两种赋值方式有什么区别?

10.static关键字的特点?

注意事项是什么?

有什么好处和弊端?

特点:

1、随着类的加载而加载,加载到方法区下;

2、优先于对象存在;

3、被所有对象共享;

4、静态的成员变量或者成员方法都是可以通过类名来调用,也可以使用对象名来调用,但是推荐使用类名来调用,在开发中,通常都是以类名来调用;

注意事项:

静态修饰成员,类成员,静态成员变量又称为类变量;

11.类变量和实例变量的区别?

静态变量属于类,所以也称为类变量

成员变量属于对象,所以也称为实例变量(对象变量)

12.构造方法能不能重载?

可以,既然是方法,就可以重载

13.静态代码块和构造代码块的区别?

静态代码块:

随着类的加载而执行,而且只执行一次

构造代码块:

每次执行构造方法之前执行

14.什么是继承?

让类和类之间产生了关系,子父类关系

15.继承的的特点和好处,弊端?

好处:

1、提高代码的复用性;

2、提高了代码的维护性;

3、让类与类之间产生了关系,是多态的前提;

弊端:

让类与类之间的依赖性增强了,也就是耦合性增强了

开发的原则:

高内聚,低耦合;

16.this和super的区别?

1、调用成员变量

This.成员变量调用本类的成员变量,也可以调用父类的成员变量

Super.成员变量调用父类的成员变量

2、调用构造方法

This()调用本类的构造方法

Super()调用父类的构造方法

3、调用成员方法

This.成员方法,调用本类的成员方法,也可以调用父类的成员方法;

Super.成员方法,调用父类的成员方法

17.Super()和this()在构造方法能同时使用吗?

Super()或者this()必须出现在构造方法的第一条语句上,只能出现其一

18.Super关键字和this关键字能否在构造函数中共存?

19.为什么每个构造函数中第一行都有默认的super()?

20.为什么默认的super()都是空参的呢?

21.构造方法的特点?

1、构造方法主要作用是给对象的属性进行初始化;

2、方法名与类名完全一致,没有返回值类型,连void都没有

3、构造方法也是方法,只是比较特殊,是在创建对象后马上调用,后期不能单独调用,既然是方法,就可以重载;

22.this的作用?

代表当前对象的引用

23.子父类都有静态代码块,构造代码块,构造方法的执行顺序?

父类静态代码块、子类静态代码块、父类构造代码块、构造方法、子类构造代码块、子类构造方法

24.final修饰的变量的初始化时机:

1、未被static关键字修饰:

可以显示初始化,可以在构造方法中初始化

2、被static修饰,可以显示初始化,可以在静态代码块中初始化,不能在构造方法中初始化;

25.final如果修饰局部变量,会发生什么事情?

Final修饰局部变量:

基本类型:

其值不能被改变;引用类型:

是地址值不能被改变,对象中的属性可以改变;

26.什么是多态?

多态的体现,前提,好处和弊端分别是什么?

多态:

多态就是事物存在的多种形态

前提:

要有继承关系

要有方法重写

要有父类引用指向子类对象

好处:

提高代码的复用性和维护性;

提高代码的扩展性;父类作参数时候

弊端:

不能使用子类的特有属性和行为

27.什么是向上转型和向下转型?

向上转型:

父类的引用指向子类对象;

向下转型:

把父类的引用转换子类,用子类强转父类的引用

28.多态中成员方法和变量的特点?

成员方法:

编译时看父类(左边),运行时看子类(右边)

成员变量:

编译时看父类(左边),运行时看父类(左边)

29.抽象类和抽象方法的特点,有什么关系?

1、抽象类和抽象方法必须用abstract关键字修饰

2、抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者接口

3、抽象类不能实例化,按照多态的方式,由具体的子类实例化;

抽象类中的子类,要么是抽象类,要么要重写抽象类中的所有抽象方法;

30.抽象类中的抽象方法和非抽象方法的区别?

抽象方法:

强制要求子类做的事情;

非抽象方法:

子类继承的事情,提高代码复用性

31.abstract不能和哪些关键字共同存在?

1、abstraet和static:

被abstract修饰的方法没有方法体,被static修饰的可以是类名,但是类名,调用抽象方法是没有意义的;

2、abstract和final:

abstract修饰的方法强制子类重写,被final修饰的不让子类重写,所以他们是矛盾的;

3、abstract和private:

被abstract修饰的是为了让子类看到并强制重写,被private修饰不让子类访问,所以他们是矛盾的

32.final修饰的变量、方法、和类有什么特点?

Final修饰的变量变常,只能被赋值一次;final修饰的方法不能被重写;final修饰的类不能被继承;

33.接口中的成员的特点?

特点:

1、成员变量只能是常量,并且是静态的并公共的。

2、构造方法:

接口没有构造方法;

3、成员方法:

只能是抽象方法。

34、类与类、类与接口、接口与接口的关系?

1、类与类:

继承关系,只能单继承,可以多层继承;

2、类与接口:

实现关系,可以单实现,也可以多实现;并且还可以在继承一个类的同时实现多个接口;

3、接口与接口:

继承关系,可以单继承,也可以多继承;

35.接口和抽象类的区别?

1、成员区别:

抽象类:

成员变量:

可以变量,也可以常量;

构造方法:

成员方法:

可以抽象,也可以非抽象

接口:

成员变量:

只可以常量

构造方法:

没有

成员方法:

只可以抽象

2、关系区别:

类与类:

继承,单继承,

类与接口:

实现,单实现,多实现

接口与接口:

继承,单继承,多继承

3、设计理念区别:

抽象类:

被继承体现的是:

isa的关系。

抽象类中定义的是该继承体系的共性功能

接口:

被实现体现的是:

likea的关系。

接口中定义的是该继承体系的扩展功能

对事物本质的抽象用抽象类,对事物功能的扩展用接口

 

36.接口的思想特点?

特点:

1、接口用关键字interface表示interface接口名{}

2、类实现接口用implements表示,class类名implements接口名

3、接口不能实例化:

按照多态的方式来实例化

4、接口的子类:

可以是抽象类但是意义不大,可以是具体类要重写接口中的所有抽象方法

37.什么是内部类,特点是什么?

内部类:

书写一个类里面,成员内部类;

特点:

1、可以直接访问外部类的成员,包括私有的

2、如果外部需要访问内部类的成员时候,需要创建外部类、内部类对象

38.成员内部类是什么?

39.内部类的方法如果访问局部变量,内部类的成员变量,外部类的成员变量?

内部类需要访问局部变量的时候,这个局部变量需要添加final;可以直接访问外部类的成员变量;

40.局部内部类访问的局部变量为什么要用final修饰?

因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用;

41.什么是匿名内部类?

写在方法里面的

42、匿名对象何时使用?

43.四种权限修饰符的比较?

Public>protected>默认>private

44.package,import,class使用顺序?

Package:

放在语句的第一行;

Import:

放在package下面,class上面,可以有多个

Class:

放在import下面,

45.代码块的分类?

静态代码块、构造代码块、局部代码块、同步代码块;

编程题

1、使用面向对象方式描述猫狗类/学生老师类/员工类/长方形类

猫狗类

classTest_Animal{

publicstaticvoidmain(String[]args){

Catc=newCat();

//c.Cat("大花猫",4,18.0);

c.setColor("大花猫");

c.setLeg(4);

c.setWeight(19.0);

c.eat();

c.sleep();

System.out.println("这是一只懒懒的"+c.getColor()+"-----"+c.getLeg()+"-----"+c.getWeight());

System.out.println("-----------------------------");

Dogd=newDog("大黑狗",3,18.8);

d.eat();

d.sleep();

System.out.println(d.getColor()+"------"+d.getLeg()+"------"+d.getWeight());

System.out.println("-----------------");

singple(newCat("小白猫",4,18.9));

singple(newDog("小黄狗",4,8.9));

}

publicstaticvoidsingple(Animala){//使用父类作为参数

a.eat();

a.sleep();

}

}

abstractclassAnimal{//创建父类Animal

privateStringcolor;//定义成员变量

privateintleg;

privatedoubleweight;

publicAnimal(){

System.out.println("这是父类的无参构造");

}

publicAnimal(Stringcolor,intleg,doubleweight){

this.color=color;

this.leg=leg;

this.weight=weight;

}

publicvoidsetColor(Stringcolor){

this.color=color;

}

publicStringgetColor(){

returncolor;

}

publicvoidsetLeg(intleg){

this.leg=leg;

}

publicintgetLeg(){

returnleg;

}

publicvoidsetWeight(doubleweight){

this.weight=weight;

}

publicdoublegetWeight(){

returnweight;

}

publicabstractvoideat();

publicabstractvoidsleep();

}

classCatextendsAnimal{

publicCat(){

System.out.println("这是子类猫的无参构造");

}

publicCat(Stringcolor,intleg,doubleweight){

super(color,leg,weight);

}

publicvoideat(){//重写抽象方法

System.out.println("猫喜欢吃鱼");

}

publicvoidsleep(){///重写抽象方法

System.out.println("猫睡觉萌萌的");

}

}

classDogextendsAnimal{

publicDog(){//空参构造

System.out.println("这是狗的空参构造");

}

publicDog(Stringcolor,intleg,doubleweight){//有参构造

super(color,leg,weight);

}

publicvoideat(){//重写抽象方法

System.out.println("狗喜欢吃骨头");

}

publicvoidsleep(){//重写抽象方法

System.out.println("狗喜欢大白天的睡觉");

}

}

学生老师类

classTest_person{

publicstaticvoidmain(String[]args){

students=newstudent();

s.sleep();

s.setName("adele");

s.setAge(28);

s.setGentle('女');

System.out.println("英国女歌手"+s.getName()+",年龄"+s.getAge()+",特别有才华的"+s.getGentle()+"歌手");

teachert=newteacher("钟老师",28,'男');

t.sleep();

System.out.println(t.getName()+"是个很负责任的老师,年龄"+t.getAge()+",姓别"+t.getGentle());

}

}

abstractclassperson{

privateStringname;

privateintage;

privatechargentle;

publicperson(){}

publicperson(Stringname,intage,chargentle){

this.name=name;

this.age=age;

this.gentle=gentle;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetName(){

returnname;

}

publicvoidsetAge(intage){

this.age=age;

}

publicintgetAge(){

returnage;

}

publicvoidsetGentle(chargentle){

this.gentle=gentle;

}

publicchargetGentle(){

returngentle;

}

publicabstractvoidsleep();

}

classstudentextendsperson{

publicstudent(){}

publicstudent(Stringname,intage,chargentle){

super(name,age,gentle);

}

publicvoidsleep(){

System.out.println("学习睡觉都比较早");

}

}

classteacherextendsperson{

publicteacher(){}

publicteacher(Stringname,intage,chargentle){

super(name,age,gentle);

}

publicvoidsleep(){

System.out.println("老师批发作业到很晚才睡");

}

}

员工类

classTest1_Employee{

publicstaticvoidmain(String[]args){

coderc=newcoder("小明",18000.0,"88888");//有参构造进行赋值

c.work();

System.out.println("----------------");

managerm=newmanager("小贱",28888.0,"33333",8888);

m.work();

System.out.println("-----------------");

employer(newcoder("小华",19999.9,"999"));

employer(newmanager("小龙",29999.9,"000",8999));

}

publicstaticvoidemployer(Employeee){//定义方法,父类作为参数

e.work();

}

}

abstractclassEmployee{//创建类

privateStringname;//定义姓名

privatedoublesalary;//定义薪水

privateStringid;//定义工号

publicEmployee(){}//空参构造

publicEmployee(Stringname,doublesalary,Stringid){//有参构造

this.name=name;

this.salary=salary;

this.id=id;

}

publicvoidsetName(Stringname){//设置姓名

this.name=name;

}

publicStringgetName(){//获取姓名

returnname;

}

publicvoidsetSalary(doublesalary){//设置薪水

this.salary=salary;

}

publicdoublegetSalary(){//获取薪水

returnsalary;

}

publicvoidsetId(Stringid){

this.id=id;

}

publicStringgetId(){

returnid;

}

publicabstractvoidwork();//定义抽象方法

}

classcoderextendsEmployee{//子类coder继承父类Employee;

publiccoder(){}

publiccoder(Stringname,doublesalary,Stringid){

super(name,salary,id);

}

publicvoidwork(){//方法重写

System.out.println("我是程序员"+getName()+",我的工资是"+getSalary()+",我的工号为"+getId()+",每天的工作就是不断的敲代码");

}

}

classmanagerextendsEmployee{//创建子类manager

privateintbonus;//定义特有属性

publicmanager(){}

publicmanager(Stringname,doublesalary,Stringid,intbonus){

super(name,salary,id);

}

publicvoidwork(){//方法重写

System.out.println("我是项目经理"+getName()+",我的工资是"+getSalary()+",我的工号为"+getId()

+",每天的工作分配任务给程序员"+"每个月的奖金"+bonus);

}

}

矩形类

classTest1_Rectangle{

publicstaticvoidmain(String[]args){

rectangler=newrectangle(20,30);

System.out.println("矩形的周长为:

"+r.getLength());

System.out.println("矩形的面积为:

"+r.getArea());

System.out.println("-----------------------");

rectangler1=newrectangle();

r1.setWidth(50);

r1.setHigh(100);

System.out.println("矩形1的周长为:

"+r1.getLength());

System.out.println("矩形1的面积为:

"+r1.getArea());

}

}

classrectangle{

privateintwidth;//定义矩形的宽

privateinthigh;//定义矩形的高

publicrectangle(){}//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1