1、面向对象的主要特征是什么?

       封装、继承、多态。

2、封装是如何实现的?

     (1)设置访问权限,public、project、private说明外部是否可以调用内部成员获方法;

     (2)设置构造方法,通过构造方法为类提供接口进行初始化。

3、对象之间如何相互作用?作用的条件是什么?

       对象之间可以通过组合,继承以及一个对象直接在其内部创建另一个对象。

       作用的条件是两个对象彼此之间要是可见的。

4、projected修饰符有什么特点

      (1)被projected修饰过的成员和方法该类本身的方法可直接调用。

      (2)被projected修饰过的成员和方法该类的子类可直接调用。

      (3)被projected修饰过的成员和方法外部的类不能够调用。

5、object都有哪些方法?

 Object是所有类的父类,任何类都默认继承Object。Object类到底实现了哪些方法?

1.clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2.getClass方法
final方法,获得运行时类型。

3.toString方法
该方法用得比较多,一般子类都有覆盖。

4.finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5.equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

6.hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

7.wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法
该方法唤醒在该对象上等待的某个线程。

9.notifyAll方法
该方法唤醒在该对象上等待的所有线程。
原文: 

6、重载的方法之间一般有什么关系?

     重载的方法之间函数名相同,返回值相同,但是参数不同。

7、子类覆盖父类方法需要什么条件?子类中定义与父类同名的方法一定是覆盖吗?

     条件:

   (1)父类的方法在子类中必须是可见的,即可以在子类中用super语句执行出来。

   (2)父类和子类的方法必须都是实例方法,如果父类是static子类是实例或者相反都不可以,如果父类和子类都是static则子类对父类的方法进行了隐藏。

   (3)子类与父类必须具有相同的函数名、函数返回值、参数列表。

   (4)子类的方法访问权限要大于等于父类的方法访问权限。权限优先级依此是public、project、private。

   (5)子类方法不能比父类方法抛出更多的编译时异常(不是运行时异常),即子类方法抛出的编译时异常或者和父类相同或者是父类异常的子类。

     子类与父类同名的方法不一定是覆盖。

8、封装、继承与多态在面向对象设计中的用途是什么?

      封装:实现对数据的隐藏,对外开放接口。

      继承:对于相同的方法或者数据成员可以直接继承,节省空间,避免写过多重复代码。

      多态:可以实现相同的方法不同的用法,传递不同的参数。

9、代码如下:

               

//Src类
                       package send;
                       public class Src extends Dis{
                        private int i=0;
                        public  Src(int i)
                         {
                            super(i); 
                         }
                        }                        
                        //Dis类        
                       package send;
                       public class Dis {
                        private int i;
                        public Dis(int i)
                          {
                                    this.i=i;
                                    System.out.println("Src's number has been changed : i ="+geti());
                          }
                        public int geti() {return i;}
                         }