面向对象 基础

1、数组有没有length()这个方法?String有没有length()这个方法?

数组中没有 length() 方法

 数组中只有length属性,表示数组的长度,而且这个属性可以理解为一个常量,

 一旦数组产生,我们就可以得到length的值,这个值不能改变;

String中有length() 方法

  返回的是字符串的长度,也不能修改。

 

2、抽象类和接口有什么区别?

相同点: ① 代表属性的抽象层

         ②都不能被实例化

         ③都能包含抽象方法

不同点: ①在抽象类中可以为部分方法提供默认现实,而接口中只能包含抽象方法;

            抽象类便于复用,接口便于代码的维护;

         ②一个类只能继承一个直接的父类,但可以实现多个接口;

 

3、重写和重载的区别?

重载:方法名相同,参数列表不同(个数、顺序、数据类型)

      在同一个类中,和访问修饰符、返回值类型无关

      作用:调用方法,赋值更加的便捷;

重写:以前的方法不能满足我么现在的需求了,需要重新编写,

      方法名与参数列表相同,

      返回值类型相同或是其子类,

      访问修饰符不能严与父类,

      抛出的异常不能大于父类;

     (需要重写的时候,子类的方法和父类的方法一摸一样即可)

 

4、请你写出你理解的Java面向对象的三大特性:

1)封装: 

什么是封装?

将类的信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法对隐藏的信息进行操作和访问;

封装的好处:①只能通过规定的方式访问数据,

            ②隐藏类的实例细节,方便修改和实现;

封装的步骤:①将属性私有化 private

            ②创建setter方法,针对用户输入的值进行判断,

            ③编写getter方法来获取值;

(2)继承

继承的目的:在多个种类中有多个重复的方法,显得代码冗余,

            通过使用继承来避免;

条件:满足 is - a 的关系  只能是单根继承

继承的语法:通过 extends 关键字来实现类与类的继承,

               class 子类类名   extends 父类类名(){}

              被继承的这个类被称为父类,基类或者超类,

              继承的这个类被称为子类或者派生类;

继承的优缺点:优点:简化了代码

                              提高了扩展性

                             提高了可维护性

                ②缺点:造成了耦合性过高,牵一发而动全身;

不能被继承的:①父类的构造方法

              ②private修饰的内容

              ③不用包下默认的修饰符的内容

     Super:可以调用父类中的属性,方法,构造方法,

            如果在构造方法中使用,必须在第一行;

   执行顺序:父类属性--父类构造方法--子类属性--子类构造方法

(3)多态

     什么是多态:

同一种操作,由于条件不同,产生的结果也不同,

同一种引用,使用不同的实例而执行不同的操作;

   使用:父类名 父类引用 =new 子类类名();

         父类的引用指向子类的实例;

         如果子类和父类中都有同样的方法,我们在使用多态的方法调用的是子类的方法

   好处:①提高代码的复用性

         ②解耦合

 

5、写出异常的语法(throwtry)

 

   try: 执行可能产生的代码

      try{

         //代码段

}catch(异常类型ex{

//对异常进行处理的代码段

}finally{

//除遇到exit()肯定执行的代码段

}

 

 

throw new Exception

  抛出异常,直接在程序中写异常信息

 public void setSex(String sex) {

/**

 * 如果赋值的是男或者女则正常赋值否则给出异常提示

 */

if("".equals(sex) ||  "".equals(sex)){

 

this.sex = sex;

}else{

//抛出异常

try {

throw  new  Exception("性别赋值不正确");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}