1.面向对象的主要特征是什么?
封装,继承,多态
2.封装是如何实现的?
封装通过访问控制实现
访问权限控制符:
public (公共访问权限)
protected (包访问权限,继承访问权限)
无访问控制权限(包访问权限)
private(类内部访问权限)
3.对象之间如何相互作用?作用的条件是什么?
通过发送消息相互作用
条件:
1,引用必须引用了特定的对象,否则会在运行时发出NullPointerException异常
2,对象必须定义了相应的属性和方法,否则编译不会通过
3,被访问的属性和方法必须具有可访问的权限。
4,protected修饰符有何特点?
当类前修饰符为 public时,protected修饰的方法和属性可以被包中的类及其子类访问,当类前无修饰符的时候,protected修饰的方法和属性只能被包中的类访问
5.Object类都有哪些方法?
Object clone()
boolean equals(Object obj)
void finalize()
Class getClass()
int hashCode()
String toString()
void notify()
void wait()
6.重载的方法之间一般有什么联系?
重载:方法名称相同,参数类型或个数不同
方法标签:方法名称+参数类型+参数个数 组成唯一键
注意:返回类型,方法修饰符不同不能视为重载
7.子类覆盖父类方法需要什么条件,子类中定义父类同名的方法一定是覆盖吗?
1.子类的访问修饰符权限应大于等于父类,不能变小,父类private方法子类不能访问,更谈不上覆写了。
2.子类的返回类型能够向上转型成为父类的返回类型,也就是返回类型是父类返回类型的子类。
3.异常也要能向上转型为父类的异常。
4.方法名,参数类型及个数必须一致
注意:覆写只能针对非静态,非final,非构造方法。在JDK中很多父类的方法被子类重新覆盖,赋予了不同的含义,如Object类中的boolean
equals(Object obj)方法。
8.封装继承与多态在面向对象程序设计的用途是什么?
封装使得内部实现对用户隐藏,有利于安全操作;继承可以实现对象之间的共性与特性;多态性更贴近人的使用习惯,使程序更方便。
9.设计Src和Dis两个类,Src中有一个被封装的属性,类型为int(要求为非负值),每当通过特定方法更改Src对象中的这个属性后,Dis对象都能得到通知,并向Src发消息获得此属性值。
package test.my_project;
class Src{
public int value;
public Src(){};
public void changevalue(int val,Dis d){
if(val<0){
System.out.println("ERROR!");
}
else{
this.value=val;
d.invoke();
}
}
}
class Dis{
public Src s;
public Dis(Src s){
this.s=s;
}
public void invoke(){
System.out.println(s.value);
}
}
public class Test {
public static void main(String[] args) {
Src src=new Src();
Dis dis=new Dis(src);
src.changevalue(5,dis);
}
}
单例模式
```java
package test.my_project;
class FightPlane{
private String name;
private int misssileNum;
private static FightPlane fp;
private FightPlane(String name,int misssileNum){
this.name=name;
this.misssileNum=misssileNum;
}
public static FightPlane getInstance(String name,int misssileNum){
if(fp==null){
fp=new FightPlane(name, misssileNum);
}
return fp;
}
public void getName(){
System.out.println(name);
}
public void getMissileNum(){
System.out.println(misssileNum);
}
}
public class Test {
public static void main(String[] args) {
FightPlane fp;
fp=FightPlane.getInstance("u35",34);
FightPlane fp1;
fp1=FightPlane.getInstance("w12",12);
fp.getName();//u35
fp1.getName();//u35
fp.getMissileNum();//34
fp1.getMissileNum();//34
System.out.println(fp==fp1);//true;
}
}



