1. java的继承性

1. 继承性的好处

  1. 减少代码的冗余
  2. 便于代码拓展
  3. 多态的使用提供前提

    2. 继承格式及使用

  4. class A extends B{}

  5. 继承后子类获取父类的属性和方法
  6. 子类继承父类后,可以声明自己的属性和方法,实现功能的拓展

    3. Java继承的规定

  7. 只支持单继承和多层继承,不支持多继承

  8. 一个子类只能有一个父类
  9. 一个父类可以有多个子类
  10. 子父类是相对概念
  11. 根父类都是 java.lang.Object

    2. java的重写

    1. 重写的概念及应用

  12. 概念:子类继承父类后可以对父类的同名同参的方法进行覆盖操作

  13. 应用:重写以后,通过子类对象调用父类同名同参方法,实际执行的是子类的方法
  14. 规定:
    1. 子类重写的方法的方法名和形参列表和父类被重写的方法的方法名和形参列表相同
    2. 子类重写方法的权限修饰符要大于等于父类被重写的方法
    3. 子类不能重写父类为private的方法
    4. 父类被重写方法的返回值是void 子类重写方法的返回值只能是void
    5. 如果父类被重写方法的返回值是A类型(引用数据类型),子类重写方法的返回值只能是A类 或者A的子类
    6. 如果父类被重写方法的返回值是基本数据类型,子类重写方法的返回值只能是相同基本数据类型
    7. 如果父类被重写方法是static 不构成重写

      2.面试题:重写和重载的区别?

      1.定义:
      1.重载是类中同名不同参数的方法之间构成重载
      2.重写是子类对父类方法按一定的规则重写
      2.重载是允许有多个同名不同参的方法,编译器根据方法不同参数表,对同名方法的修饰,对编译器而言这些方法就了成不同的方法,他们的地址在编译期间就确定了,Java的重载是包含子类和父类的,即子类可以重载父类同名不同参的方法
      对于重载而言,在编译前就已经确定了要调用的方法,这种属于早绑定-静态绑定
      多余多态而言,只有等到方法调用时,才能确定所要调用的方法这种成为晚绑定-动态绑定
      晚绑定构成多态 早绑定不构成多态

      3. super关键字

  1. super 调用父类的属性、方法
  2. super 调用父类的构造器 只能在子类构造器的首行,子类构造器和父类构造器只能有一个

    4. 多态

    多态:可以理解为事物的多种形态 父类的对象指向子类的引用(子类的引用赋给父类的引用) Person p = new Man(); 多态的使用 :当调用子父类同名同参的方法时,实际上执行的是子类的方法(虚拟方法调用) 编译看左,执行看右 多态的前提:

    1. 类的继承关系
    2. 方法的重写

    只适用于方法 不适用于属性 属性 编译执行都看左边 不能调用子类特有的方法

面试题

  1. 多态是编译时行为 还是运行时行为

    运行时行为
    父类方法被称为虚拟方法,父类根据给它赋值的不同子类对象,动态调用子类的方法,这样的方法调用在编译期间无法判断

5. instanceof

Person p = new Man(); //向上转型 多态
问题?多态中如何调用子类的方法和属性?
强制类型转换,Man m = (Man) p 向下转型 (使用instanceof 判断)
使用强制转换时可能会出现异常!!!
为了避免出现异常 我们在向下转型之前使用 instanceof 进行判断

a instanceof A 判断对象a 是否是A的实例 如果是就返回true 不是返回false

6. object类的使用

1. 基本使用

  1. Object 类是所有类的根父类
  2. 所有未使用extends指定其父类,那么父类为object
  3. Object类中的属性、方法具有通用性
  4. Object 只声明了一个空参构造器
  5. clone() getClass() hashCode() wait() notify() notifyAll() finalize() equals() toString()

    2. 面试题目 == 和 equals的区别

  6. == 是运算符 可以判断基本数据类型,也可以判断引用数据类型,对于基本数据类型判断的是值(数据类型不一定要相同,存在类型提升),对于引用数据类型判断的是地址

  7. equals 是 Object类方法 如果没有重写 equals方法 默认也是用的 == String类中重写了equals 方法不再比较地址,而是比较实体内容是否相等
  8. 具体要看自定义类有没有重写 eqluals 方法
  9. 通常情况下,重写equals方法会比较相应的属性都相等

    7. 包装类的使用

    | 基本数据类型 | 包装类 | | :—-: | :—-: | | byte | Byte | | short | Short | | int | Integer | | long | Long | | float | Float | | double | Double | | boolean | Boolean | | char | Character |

整型和浮点型父类Number

基本数据类型、包装类、String类之间的转换

1. 包装类的使用

  1. java 提供8种基本数据类型对应的包装类,使得基本数据类型具有类的特性
  2. 三种类型之间的转换
    1. 基本数据类型转包装类:调用包装类的构造器
      1. Integer i = new Integer(10);
      2. Integer i = new Integer(“10”);
      3. Float f = new Fload(“10.01”);
    2. 包装类转基本数据类型:调用包装类的xxxValue()

Integer i = new Integer(10);
int i1 = i.intValue();
c. 自动装箱,自动拆箱
int num = 10;
Integer num1 = num; //自动装箱
int num2 = num1; // 自动拆箱
d. 基本数据类型转String 类型
int num = 10;
//方式一:连接运算
String str = num + “”;
//方式二:调用String的方法
String s = String.valueOf(num);
e. String 类型转基本数据类型或者是包装类 调用包装类的 parseXxx()
String str = “123”;
int i = Integer.parseInt(str);

8. 面试题

  1. Object o = true ? new Integer(1) : new Double(2.0);
  2. System.out.println(o);
  3. //三元运算符 要求数据类型相同 这里做了数据类型提升 变为double类型
  4. //结果为1.0
  1. Integer i1 = 1;
  2. Integer i2 = 1;
  3. System.out.println(i1 == i2);//true
  4. Integer i3 = 128;
  5. Integer i4 = 128;
  6. System.out.println(i3 == i4);//false
  7. Integer 内部定义了IntegerCache 定义了 Integer[] 存放-128 ~ 127 如果在区间范围内直接取,超出范围就需要重新new Integer 提高效率