面向对象
Posted ren549047861
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
1.简述面向对象和面向过程的区别和联系?
两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。
比喻
面向过程是蛋炒饭,面向对象是盖浇饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
区别
编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。
封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。
面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。
2.对象和类的关系是?
类是抽象的
对象是具体的,是类抽象概念的实物表达
3.栈的特点是?存放什么内容?
栈的特点:先进后出
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
4.堆得特点是?存放什么内容?
堆内存的特点:
堆内存有内存地址,都是将内存的地址赋值给引用变量
堆内存变量无用后由垃圾回收机制不定时回收
堆内存会自动初始化
堆内存存放引用数据类,及new出来的都在堆内存里面
5.【上机】画出如下程序的内存结构(课堂上的代码):
//测试类和对象
public class TestObject
public static void main(String[] args)
Car c1 = new Car();
c1.changeColor("红色");
c1.showColor();
System.out.println(Car.tyreNum);
System.out.println(c1.tyreNum);
Car c2 = new Car();
Engine e = new Engine();
e.speed = 1000;
e.weight = 10;
c2.engine = e;
c2.color="黑色";
c2.tyreNum = 10;
System.out.println(c1.tyreNum);
class Car
static int tyreNum=4;
Engine engine;
String color; //char sequence :字符序列
void changeColor(String c)
color = c;
void showColor()
System.out.println("我的颜色是:"+color);
class Engine
int speed;
int weight;
6.局部变量、成员变量、静态变量分别怎么声明?
局部变量:在方法或代码块中声明的变量称为局部变量
成员变量:在类中声明的变量称为成员变量
静态变量:使用static修饰的成员变量称为静态变量
7.局部变量使用之前,必须要手动初始化吗?
局部变量在使用之前,必须要手动初始化
8.如果不手动指定成员变量的值,系统将会自动初始化。那么初始化的规则是?
整型初始化为0
浮点型初始化为 0.0
引用数据类型初始化为null
boolean类型初始化为false
char类型的初始化为\u0000
9.成员变量从属于谁? 静态变量又叫什么以及从属于谁? 局部变量从属于谁?
成员变量从属于对象
静态变量又叫类变量从属于类
局部变量从属于方法或代码块
10.构造方法的作用是两个:一个构造类的对象,另一个作用是初始化对象的属性。这 种说法对不?
对
11.构造方法的名称必须保持跟类名一致吗?
必须与类名一致
12.构造方法有没有返回值?详细用文字描述返回值问题。
构造方法没有返顺值,也不可以写void
13.构造方法如何被调用?
构造方法在创建对象时被调用,使用关键字new
14.构造方法中能不能有return语句?
构造方法中不能使用return语句
15.系统一定会给我们添加无参数的构造方法吗? 请详细解释。
如果手动编写了构造方法之后,系统就不会添加无参构造方法了
16.下面的代码有什么问题:
class Computer
int price;
int type;
String brand;
public void start()
System.out.println("启动中....");
computer(int _price, int type, String _brand)
//this.price = price;
price = _price;
type = type;
brand = _brand;
当局部变量名称与成员变量名称相同时,使用this代表成员变量,代码应改为
computer(int price, int type, String brand)
this.price=price;
this.type=type;
this.brand=brand;
17.【上机】设计一个类代表二维空间的一个点
public class Point
private int x;
private int y;
public void setX(int x)
this.x=x;
public int getX()
return x;
public void setY(int y)
this.y=y;
public int getY()
return y;
public Point()
public Point(int x,int y)
this.x=x;
this.y=y;
18.【上机】设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一 个是半径提供计算面积的方法。
public class Cricle
private int r;
private Point point;
public void setR(int r)
this.r=r;
public int getR()
return r;
public void setPoint(Point point)
this.point=point;
pubic Point getPoint()
return point;
public Cricle()
public Cricle(int r,Point point)
this.r=r;
this.point=point;
public double area()
return Math.PI*Math.pow(r,2);
19.【上机】为上述Cricle类添加一个方法,计算一个点(Point对象)是否在圆(Cricle
对象)内,并写程序验证
//在Cricle类中加入方法
public class Cricle
…..
public boolean isFlag(Point p)
if(Math.pow(x-p.getX())+Math.pow(y-getY())<=Math.pow(r,2))
return true;
return false;
public class Test
public static void main(String [] args)
Point p=new Point(3,3);//圆心
Cricle c=new Cricle(5,p);
System.out.println(c.isFlag(new Point(5,5))?”在圆内”:”不在圆内”);
20.构造方法能不能重载?
构造方法可以重载
21.this在普通方法中,指的是哪个对象?在构造方法中,指的是?
this在普通方法中总是指向调用该方法的对象
this在构造方法中总是指向正要初始化的对象
22.static变量在内存中放置在哪个区? static变量和方法为什么被称为类变量和类方
法?可以被该类所有对象共享吗?
static变量存在数据区
static变量和方法归类所有,使用类名去调用
可以被该类的所有对象所共享
23.静态初始化块和main方法哪个先被执行?
静态初始化块先执行
24.一个构造方法调用另一个构造方法怎么调用? this(),这样的调用方式必须位于第
一句吗?
this()调用本类的无参构造方法
this(实参列表)调用本类的带参构造方法
super()调用直接父类的无参构造方法
super(实参列表)调用直接父类的带参构造方法
this()调用必须位于构造方法的第一句
25.package的两个作用是什么?
解决类之间的重名问题
为了便于管理类:合适的类位于合适的包
26.增加package以后,我们在DOS下编译怎么做?
javac -d . Test.java
27.import是用于导入包还是导入类?
import是用于导入其它包中的类
28.import Java.util.*; 会不会降低程序运行速度?为什么?
不会降低程序的运行速度
因为是导入该包下的所有的类,会降低编译速度
29.import static 静态导入的作用是导入类还是导入类的静态属性和静态方法
导入类的静态属性和静态方法
30.如果同时导入:Java.util.Date; Java.sql.Date; 在程序中怎么区分它们?
只能用包名+类名来显示调用相关类
java.util.Date date=new java.util.Date();
31.【上机】 完成this、static、package、import的测试代码
package cn.sxt.pro
import java.util.Scanner;
public class Test
public static int age;
private String name;
public void setName(String name)
this.name=name;
public static void show()
public static void main(String [] args)
System.out.println(Test.age);
System.out.println(Test.show());
32.Javadoc注释怎么写?
/**开头
*/结束
33.Java项目的API文档如何生成?请将步骤写出。
javadoc 源文件名.java;
34.面向对象中的封装,追求的是“高内聚,低耦合”。解释一下,内聚什么?什么叫
耦合?
内聚:程序内的各个模块之间的关系紧密程度
耦合:外部程序(子程序)之间的关系紧密程度
35.封装的几个关键字:private,default,protected,public的含义。
代表的是访问权限
private:私有的,只能本类访问
default:默认的,本类,子类,本包中的其它类都可以访问
protected:受保护的,本类,本包及其它包中的子类可以访问
public:公共的,本类,子类,本包及其它中的类都可以访问
36.一般属性是否要设置为private?
是, 属性就不能被赋值上任何非法的值了
37.如果属性设置为private,如何让外部访问该属性?
编写公有的取值的get方法
38.提供getter、setter方法的操作,eclipse中如何实现?
菜单栏SourceGenerate getters and setters
39.对于boolean类型的属性,提供的getter方法是:getXXX或是isXXX?
isXXX;
40.Javabean就是只包含属性和相关getter、setter方法,不包含业务逻辑处理的 类,这种说法对吗?
不对
Javabean既可以封装数据同时也可以封装业务逻辑
41.继承的好处是什么?
好处一:继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象
好处二:为了提高代码的复用性
42.Java中有多继承吗?C++中有多继承吗? 单继承相比多继承优势在什么地方?
java中只有单继承
C++中有多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单
43.【上机】模仿课堂上动物世界的例子,我们自己写个例子。
class Person
class Teacher extends Person
44.Java的继承使用哪个关键字实现?
extends
45.定义某个类时,如果没有使用extends,那么继承了哪个类?
如果没有使用extends,那么继承了Object类
46.Java中,有没有多继承? 请说明,Java为什么取消了多继承?
java中没有多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单
47.重写(override)指的是什么?
指的是子类对父类中方法的重写
48.假如父类有main方法,子类能不能继承?
不能
49.Object是所有类的根类吗?是所有类的直接父类吗?
Object是所有类的根类
不是所有类的直接父类
50.在哪里查看Object类的源代码?
jdk安装目录中的src压缩包中可以查看源码
51.Object类中的toString方法能否被子类重写?请做测试。
能
52.【上机】完成继承、Object相关的测试代码
53.super指的是什么?
super指的是直接父类
54.构造方法中,第一个话总是super吗?
也可以是this()
55.叙述一下,有继承结构时,构造方法的调用顺序?
继承条件下构造方法的调用规则如下:
如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。
56.重写中,子类的返回值类型可不可以跟父类不完全一致?说出你的理由。
可以
子类的返回值可以与父类相同,也可以是父类方法返回值的子类
57.如何判断两个对象内容是否相同?重写equals()有什么要求?
判断两个对象的内容是否相同,需要重写Object类的equals方法
58.举一个现实的例子,说明多态。
我第一次去见丈母娘。还没见的时候,我女朋友已经把我的情况介绍给丈母娘了,说我“长得像港台明星”。见面以后丈母娘一看,哇,原来是像曾志伟。当场晕倒。
59.多态的三个必要条件是什么?
继承
方法重写
父类引用指向子类对象
60.什么是向上转型?什么是向下转型?
向上转型:父类引用指向子类对象
向下转型:将父类引用转成真实的子类对象
61.多态的常用使用场合有哪些?
使用父类做方法的形参,实参可以是该父类的任意子类类型
使用父类做方法的返回值类型,返回值可以改父类的任意子类对象
62.Java的方法绑定采用动态绑定还是静态绑定?
静态方法,构造器,private方法,用关键字super调用的方法是静态绑定
通过对象调用的方法,采用动态绑定
63.final修饰变量、方法、类分别表示什么含义?
final修饰的变量不可改变,一旦赋了初值,就不能被重新赋值,称为常量
final 修饰的方法不能被子类重写
final修饰的类不能有子类
64.final修饰的方法能不能被重载?能不能被重写?
final修饰的方法可以重载
final修饰的方法不能重写
65.String类能不能被继承?为什么?
String类不能被继承
因为String类是使用final修饰的类
66.包含抽象方法的类是抽象类吗? 抽象类一定包含抽象方法吗?
包含抽象方法的类是抽象类
抽象类中不一定含有抽象方法
67.抽象类中能不能有普通方法?能不能定义构造方法?
抽象类中可以有普通方法
抽象类中可以定义构造方法
68.抽象类能不能被new出来?即抽象类的构造方法能不能被调用?
抽象类不能被new出来
抽象类的构造方法被子类调用
69.接口中只能定义常量和抽象方法吗?
JDK1.7之前,接口中只能定义静态常量和公共的抽象方法
JDK1.8中,接口中可以定义静态方法
70.接口描述了现实世界中什么逻辑?
接口描述了现实世界是“如果你是…则必须能..”的思想
如果你是天使,则必须能飞;如果你是汽车,则必须能跑
71.接口中的常量一定是public static final吗?抽象方法一定是public abstract 吗?
是的
72.接口中能不能定义普通变量,普通方法?从设计接口的角度说明为什么这么做?
接口中不能定义普通变量,也不能定义普通方法
因为接口就是一种规范,定义一种规则
73.接口能不能被new?
接口不能被new
74.接口中有没有多继承?
接口中有多继承
75.一个类能不能实现多个接口?
一个类能够实现多个接口
76.【上机】完成抽象类、接口的语法测试代码
public interface TakePhoto
abstract class Phone
class MoblePhone extends Phone implements TakePhoto
class Test
public static void main(String[] args)
MobilePhone mp=new MobilePhone();
77.【上机】使用接口,定义电子产品系统(智能手机、MP3、智能手表)。
public interface Electronic
class MobilePhone implements Electronic
class Mp3 implements Electronic
class Watch implements Electronic
78.如何对一个数组的多个对象按照不同的依据进行排序;
对象实现Comparable接口
或者定义比较规则的类实现Comparator接口
79.模拟实现Comparable和Comparator接口;
实现Comparable接口
public class Student implements Comparable<Student>
private int age;
public int getAge()
return age;
public void setAge(int age)
this.age = age;
@Override
public int compareTo(Student o)
return this.age-o.getAge();
实现Comparator接口
class AgeComparator implements Comparator<Student>
@Override
public int compare(Student o1, Student o2)
return o1.getAge()-o2.getAge();
80.GC指的是什么?写出英文全称。垃圾回收机制中,程序员能不能调用垃圾回收器?
GC:是指垃圾回收
英文:garbage collection
程序员无权调用垃圾回收器
81.System.gc()指的是什么意思?
运行垃圾回收器
82.finalize方法可以用来做什么?
在垃圾收集器将对象从内存中清除出去前,做必要的清理工作
83.通过两个事例描述C++,Java不同的内存回收机制。
很久很久以前,每家每户“自扫门前雪”,自己收垃圾。
现在,环保局的垃圾车自动收垃圾。
通过,这些例子类比Java和C++不同的回收机制及特点。
C++需要程序员手动编写垃圾回收的代码,如果程序员忘了那么就容易造成内存 溢出等问题
java无需手动编写,jvm的垃圾回收机制会自动进行垃圾回收,减轻了程序员的 工作,也避免由于程序员忘记而造成的各种内存溢出等问题
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章