2019-07-17

方法的重写

(发生在父子之间)

1)方法的重载overload:方法名相同,参数列表不同

     方法的重写override:子类通过重写父类的方法,可以用自身的行为替换父类的行为

2)重写的三个条件

1.“==”: 方法名、形参列表相同。

 2.“≤”:返回值类型和声明异常类型,子类小于等于父类。

  3.“≥”: 访问权限,子类大于等于父类。

3)符号

@Override  :主要标识当前的方法是重写父类的方法,该方法必须满足重写的特征

4)重写格式:和父类方法名,形参列表相同

5)作用:方法的重写是实现多态的必要条件。

编写的代码及运行结果


Object类的基本特征

1)Object类是所有Java类的根基类,也就意味着所有的Java对象都拥有Object类的属性和方法。如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。

eg:public class User2 extends Object{}

2)java.lang.Object常用的方法:toString(),其返回值是 String 类型

如果不重写Object类中的toSting()方法,默认会返回“类名+@+16进制的hashcode”(即返回一个存放的地址名)

编写代码及运行结果

3)如果重写Object类中的toSting()方法会打印出具体的内容

重写Object中的toSting()方法:

public String toString(){

 return ....

 }

编写代码


==和equals方法

1)==在比较数值类型的值时,代表的是比较的两个数值是否相等

  ==在比较对象时,代表的是比较两个对象的内存地址是否相同

2)equals如果不重写的话,默认比较的是内存地址

   通过子类重写equals方法,比较的是内容是否相同

3)equals方法来源:Object类中的equals方法

Object类中的equals方法的源码如下:(默认比较的是内存地址)

public boolean equals(Object obj);{

return (this == obj);

 }

4)重写equals方法

右键 source选项,再点击  Generate hashCode() and equale()...


会出现如下界面,点击右下方的Generate


编写代码及运行结果



super关键字

super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。

 若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。这里的super()可以省略。

1)super可以直接访问父类的属性和方法

super.属性          super.方法名()

2)使用super关键字访问父类的构造方法,必须放在子类构造方法的第一行

编写代码及运行结果




3)继承树追溯

属性/方法查找顺序:(比如:查找变量h)

      1. 查找当前类中有没有属性h

      2. 依次上溯每个父类,查看每个父类中是否有h,直到Object

      3. 如果没找到,则出现编译错误。

      4. 上面步骤,只要找到h变量,则这个过程终止。

构造方法调用顺序:

      构造方法第一句总是:super(…)来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

      注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。

编写代码及运行结果


封装

1)定义:需要让用户知道的才暴露出来,不需要让用户知道的全部隐藏起来,这就是封装

2)作用:封装就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

3)优点:

 1. 提高代码的安全性。

     2. 提高代码的复用性。

     3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。

     4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作

注意:我们程序设计要追求“高内聚,低耦合”。 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。

没有封装的代码会出现一些问题



4)封装的实现——使用访问控制符


  1. private 表示私有,只有自己类能访问

   2. default表示没有修饰符修饰,只有同一个包的类能访问

   3. protected表示可以被同一个包的类以及其他包中的子类访问

    4. public表示可以被该项目的所有包中的所有类访问

编写代码如下


5)使用细节

1.私有的属性(用private修饰的属性)

2.公有的getter方法和setter方法赋值(public修饰的方法)

getter方法取值,命名规则:get+属性名首字母大写+其余字母

注意:boolean类型getter方法:is+属性首字母大写+其余字母

setter方法赋值,命名规则:set+属性名首字母大写+其余字母



3.无参构造方法

JavaBean的封装实例



多态

1)定义:多态指的是同一个方法调用,由于对象不同可能会有不同的行为

生活中的多态:水(固态冰,液态水,水蒸气)

2)优点:提高程序的扩展性和可维护性

3)多态的要点

 1. 多态是方法的多态,不是属性的多态(多态与属性无关)。

2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。

3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。


对象的转型

1)向上转型:父类引用指向子类对象,属于自动转换类型

 将子类当作父类进行使用,只能访问子类和父类共有的方法和属性

2)向下转换:将父类类型转换为子类类型,属于强制转换类型

注意: 在向下转型过程中,必须将引用变量转成真实的子类类型(运行时类型)否则会出现类型转换异常ClassCastException。

为了避免出现这种异常,我们可以使用instanceof运算符进行判断


final关键字

 1. 修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。

 2. 修饰方法:该方法不可被子类重写。但是可以被重载!

  3. 修饰类: 修饰的类不能被继承。

你可能感兴趣的:(2019-07-17)