Java 的继承与多态
- 继承
-
- 继承的基本概念
-
继承是两个类之间的一种关系,当一个类B继承了一 个已存在的类A后,类B就有了类A所有的非private的属性和方法
子类不能继承父类的构造方法,但是能够通过super关键字调用
在类声明时,如果没有使用extends关键字继承父类,则自动继承Object类。所有的java类都直接或间接的继承java.lang.object类
子类不能继承父类的peivate属性和方法,可通过使用父类的setter方法和getter方法获得父类的private属性
如果子类和父类在同一个包中,则子类不能直接访问父类的private属性和方法,但是子类可以调用非private的属性和方法。如子类和父类不在一个包中,那么子类可以访问父类的protected、public的属性和方法,但不能访问父类的private、默认访问级别的属性和方法。
-
- 继承的基本概念
- 重写父类中的方法
-
方法重载:在同一个类中实现两个或者两个以上的方法名相同而参数列表不同的方法。
如果子类中定义的方法使用的方法名、返回值类型和参数列表与父类中的方法完全一致,则称为子类的方法重写了父类的方法
方法重写只存在于子类和父类之间,而同一个类中只能重载。
父类的构造方法不能被重写。因为构造方法与所在父类的类名相同,而子类和父类的类名不同。
使用方法重写时,需满足的条件:1.子类的方法名、返回值类型和参数列表必须与父类方法的方法名、返回值类型和参数列表完全一致。2.子类方法不能缩小父类方法的访问权限。 3.父类的静态方法不能被子类重写为非静态方法,父类的非静态方法也不能被子类重写为静态方法。子类定义和父类相同的静态方法。4.子类方法不能抛出比父类方法更多的异常。5.父类中的私有方法不能被子类重写。6.父类中的抽象方法可以被子类通过两种途径重写:第一、实现父类的抽象方法,第二、子类重新声明父类的抽象方法。
-
- 构造方法遇到继承
- 在继承中,子类对象在实例化之前必须先调用父类中的构造方法,再调用子类自身的构造方法。
-
- this关键字 和 super关键字
- 使用this调用本类中的属性
- this.成员变量名 、、调用类中的成员变量
- 使用this调用构造方法
- 构造方法重载的目的是以不同的方式来实例化对象。构造方法重载时,可以在构造方法中使用this()调用其他构造方法。this()在调用其他构造方法时必须放在该方法体的首行。。
- this表示当前对象
- super关键字
- 在子类中调用父类的属性和方法。
- 在子类中调用父类的构造方法。
- 使用this调用本类中的属性
- 转型
- 向上转型
- 向上转型指的是子类对象到父类对象的类型转换,使得父类对象可以调用被子类重写的所有方法。向上转型是自动完成的,
- 父类 父类对象名 = new 子类();
- 父类调用子类的方法时,向上转型的对象不能调用子类新增的方法。
- 向上转型指的是子类对象到父类对象的类型转换,使得父类对象可以调用被子类重写的所有方法。向上转型是自动完成的,
- 向下转型
-
- 向下转型:父类类型转化为子类类型。
-
Person per = new student();student stu = (student)per;先创建子类student实例并赋值给父类Person使用,在强制将per转换为子类对象stu实现向下转型。如果直接将父类对象向下转型为子类对象时,会发生类型不兼容的错误(先上再下)
-
- 向下转型:父类类型转化为子类类型。
-
- 向上转型
- instanceof关键字
- instanceof关键字属于Java的二元运算符。其作用是判断某个对象是否属于某个类或接口类型。
- 对象名 instanceof 类名;;instanceof运算结果为boolean值
- instanceof关键字前面的对象名要么与后面的类相同,要么是后面类的父类。否则编译时将会报错
- instanceof关键字属于Java的二元运算符。其作用是判断某个对象是否属于某个类或接口类型。
- 封装类
- 封装类简介
-
基本数据类型不支持面向对象的编程机制,也不具备“对象”的特性,没有属性和方法可以被调用。在java编程中,操作的内容均为对象。所以希望将基本数据类型当作对象来使用,这就需要封装类。封装类的作用是将基本数据类型转变为类的形式。
- 封装类的两个功能:1.将基本数据类型封装后,可当做对象使用。2.为基本数据类型提供各种转换功能。如将数值转换为字符串、等
-
- 装箱与拆箱
- 装箱:基本数据类型转换为封装类
- int x = 100;Integer in = new Integer(x);
- 拆箱:封装类转换为对应的基本数据类型。
- 装箱:基本数据类型转换为封装类
- 利用封装类进行数据转换
- 将数值转化为字符串:
- 创建封装类封装该值,在调用所创建对象的tostring()方法。
- 将字符串转化为数值:
- string str = “123”;int i = Integer.paraseInt(str);将字符串转换为int型数据,,paraseDouble等
- 将数值转化为字符串:
- 封装类简介
- 继承