1.面向对象的主要特征是什么?
封装,继承,多态
封装:把事物抽象成一个类,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系
继承:从已有的类(父类或者超类)中派生出新的类(子类),新的类能吸收已有类的数据属性和行为,并能扩展新的能力(方法的覆盖/重写)。JAVA不支持多继承,一个类只能有一个父类。父类是子类的一般化,子类是父类的特殊化(具体化)
多态:同名但不同方法,包括重载和覆盖
2.封装如何实现的?
>>修改属性的可见性来限制对属性的访问。
>>为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。
>>在赋值和取值方法中,加入对属性的存取限制。
例如:
3.对象之间如何相互作用?作用的条件是什么?
对象与对象的常见关系:
依赖,关联,聚合,组合,继承
4.protected修饰符有哪些特点?
>>protected 访问控制符能被用于方法和成员变量。
>> 声明为protected的方法和成员变量能被同一个包里的所有类所访问,就像默认修饰符package一样。
>>能被该类的子类所访问,子类可以和父类不在一个包中。
这样,当你想让一个类中的某个方法或成员变量在包中都可见,而且其子类也能访问(子类有可能和父类不在同一个包中)但又不想让所有类都可以访问该类时,就可以用protected修饰符。
5.Object都有哪些方法?
Object是所有类的共同祖先。在Object当中定义了许多方法,这些方法都可以被所有子类所继承。
6.重载的方法之间一般有什么关系?
在代码编写中,重载的多个方法之间往往存在一定的调用关系,即一个方法写有实现功能,其他方法采用委托方式进行调用——体现程序共享的设计思想
7.子类覆盖父类方法需要什么条件?子类中定义与父类同名的方法一定是覆盖吗?
8.封装,继承,和多态在面向对象程序设计中的用途是什么?
封装:提高代码的安全性;提高代码的复用性;高内聚”:封装细节,便于修改内部代码,提高可维护性;“低耦合”:简化外部调用,便于调用者使用,便于扩展和写作。
继承:从已有的类(父类或者超类)中派生出新的类(子类),新的类能吸收已有类的数据属性和行为,并能扩展新的能力(方法的覆盖/重写)
多态:
1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。
2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
9.设计Src和Dis两个类,Src中有一个被封装的属性,类型为int(要求为非负值),每当通过特定方法更改Src对象中的这个属性后,Dis对象都能得到通知,并向Src发消息获得此属性值
class Src
{
int s;
public Src(int _s){//构造函数,保证s的非负
if(_s>=0)
s = _s;
else s=0;
}
public void change(Dis d){//设计一个特殊的方法来改变s的值,每次改变都会给Dis对象发通知
for(int a=1;a<5;a++)
{
d.get();
s=s+a*2;
}
}
}
class Dis
{
Src src;
public Dis(Src s){
this.src = s; //Dis对象中拥有了Src对象的引用
}
public void invoke(){
//Dis中对象发送消息给Src的对象
System.out.println(src.s);
}
public void get()//用来接收通知的方法
{
this.invoke();
}
}
public class Helloworld {
public static void main(String[] args) {
Src src = new Src(5);
//产生Dis对象,并将Src对象引用作为参数传入
Dis dis = new Dis(src);
//发送消息,产生调用关系
dis.src.change(dis);
}
}