什么是封装?什么是继承?什么是方法重写?详情介绍封装、继承、方法重写
什么是封装?
封装就是将对象的属性和实现的过程进项隐藏,对外界只留下接口(方法/函数)通过这个接口来修改获取对象的属性和功能行为。
封装的目的:
增强信息流的安全性和简化编程,使用的时候可以直接特定的接口来使用类的成员(属性数据和函数都是类的成员)
封装的作用
就是保护内部代码不被破坏
- 拒绝直接调用声明字段,保护内部的数据,更安全。
- 重复代码调用,避免代码冗余,程序编写效率高。
什么是继承?
继承发生在父类和子类之间,子类继承父类,使子类具有父类的属性和方法或者重新定义、追加属性和方法等。
**优点:**继承使代码的复用更加简单容易,大大缩短了开发的周期,降低开发成本。
A继承B:
A:子类 或者称为 派生类
B:父类 或者 超类、基类。
为什么要继承
- 提高代码的复用性,使开发更加简单便捷。
- 起到扩展功能的作用。
方法重写 @Override
什么是方法重写
在Java和其他一些面向对象的编程语言中,子类可继承父类中的方法,而不需要从新编写相同的方法,但有时子类不想原封不动的继承父类的方法,而是想做一定的修改,这就需要采用方法的重写,方法重写又称方法覆盖。
方法从写 和 方法重载的区别:
重载(Overload):发生在同一个类中,方法名相同,参数列表不同,不考虑返回值。
-
重写(Override):发生在父子类中,子类继承父类的方法,方法名相同,参数也相同,但是实现方法体不同。
-
重写需要注意的事项
子类和父类的方法必须具有相同的函数名称、参数列表,并且子类的返回值与父类相同父类返回类型的子类型。如果方法名称相同而参数列表不同(返回类型可以相同也可以不同),那么只是方法的重载。而非从写。如果方法名称和参数列表相同,返回类型不同,子类返回值类型也不是父类返回值类型的子类型,编译器就会报错
-
子类方法的权限必须大于等于父类方法的权限(不包括private)。
-
私有的不能被继承
-
super关键字
-
如果子类既想有自己的方法,又想父类的成员变量和方法,
- 在子类的成员方法中访问父类的成员变量和成员方法
- 在子类的构造方法中访问父类的构造方法。
this关键字
代表当前这个对象
继承中构造方法的特点(父子类)
- 构造方法不能被继承(构造方法是一个类独有的方法)
- 创建子类对象一定是优先调用父类构造,再调用子类构造(并且只有子类构造才能调用父类构造)
- 子类构造可以通过super关键字调用父类有参构造、无参super()、有参super(参数列表)。
- super父类构造调用,必须是子类构造中的第一行语句。 (并且一个子类构造,只能调用一次super())。必须先有父再有子。
-
基本类型包装类
基本数据类型:
基本数据类型 | 包装类 | 字节 | 取值范围 |
---|---|---|---|
byte | Byte | 1 | -128-127 |
short | Short | 2 | -215-215-1 |
int | Integer | 4 | -231-231-1 |
long | Long | 8 | -263-263-1 |
float | Float | 4 | -2-149-2128-1 |
double | Double | 8 | -2-107421024-1 |
char | Character | 2 | 单引号括住的单个字符unicode表中的所有的字符,Unicode表涵盖了几乎所有国家的所有语言的所有文字 |
boolean | Boolean | true/false |
自动装箱与自动拆箱:基本数据类型和包装类之间可以自动地相互转换
装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的。(xxx代表对应的基本数据类型)。
常见面试题
int和Integer的区别
- 默认值: int是0 Integer 是null
- Integer是int封装类 int-》Integer 装箱 Integer里的ValueOf
- Integer->int intValue()
int 是基本数据类型,Integer是引用数据类型。