java学习笔记2--面向对象编程( 五 )


方法的重写是指子类继承父类后,可以对父类同名同参数的方法进行覆盖操作;
14.2 细节(两小一大)
子类:重写方法;
父类:被重写方法;
如果子类的方法与父类的方法同名同参数,那么子类一定要满足重写的规则,不然编译报错
14.2.1 权限修饰符(大)14.2.2 返回值类型(小)14.2.3 异常(小)14.2.414.3 调用14.4 重写与重载的区别
14.5 意义
父类方法中的逻辑不适用于子类,所以子类需要对父类的方法进行重写 。
15.super关键字(表示父类的xxx) 15.1 作用
在子类中使用,可以调用父类的属性、方法或者构造器;
15.2 使用
super.属性/方法/构造器
15.2.1 属性和方法15.2.2 构造器15.3 为什么super(…)或this(…)调用语句只能作为构造函数中的第一句出现?
无论通过哪个构造器创建对象,都要保证先初始化父类;
目的:当子类继承父类后,继承了父类中所有的属性和方法,因此子类有必要知道父类是如何进行初始化的 。
15.4 this和super的区别
super不可以单独使用
16.子类对象实例化的过程17.多态(向上转型) 17.1 对多态的理解
一种事物具有多种状态 。
【java学习笔记2--面向对象编程】17.2 使用 17.2.1 使用前提17.2.2 格式
父类引用指向子类对象(向上转型):父类名称 父类引用 = new 子类名称();
// 1,2两种写法相同,都是向上转型子类 子类对象 = new 子类();父类 父类引用 = 子类对象;// 1父类 父类引用 = (父类名称)子类对象; //2
17.2.3 多态的使用:虚拟方法调用
虚拟方法:子类重写了父类的方法,在多态情况下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法 。这样的方法调用在编译期是无法确定的,只能在运行期间确定 。(多态情况下,父类中被重写的方法称为虚拟方法)
编译看左边,运行看右边:有了对象多态性以后,我们在编译期,只能调用父类声明的方法,但在执行期实际执行的是子类重写父类的方法 。
Java引用变量有两个类型:编译时类型和运行时类型 。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定 。==若编译时类型和运行时类型不一致,就出现了对象的多态性() 。==多态情况下,
“看左边”:看的是父类的引用(父类中不具备子类特有的方法)
“看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)
17.2.4 注意事项17.3 作用
提高了代码的通用性,常称作接口重用
17.4 向下转型
17.4.1 作用
多态情况下,内存中实际上加载了子类中特有的成员方法和属性,但是由于变量声明为父类类型,导致编译时只能调用父类的成员,无法直接调用子类中特有的成员,所以要通过向下转型将父类引用转为子类对象 。(类似于强制转换)
17.4.2 格式
子类名称 对象名 = (子类名称)父类引用
17.4.3 关键字
格式:xA:检验x的运行类型是否为类A或A子类的对象,返回值为型 。
作用:避免向下转型时,出现java.lang.异常 。
17.4.4 向下转型的常见问题
//问题一:编译时通过,运行时不通过//举例一//Person p3 = new Woman();//Man m3 = (Man)p3;//举例二Person p4 = new Person();Man m4 = (Man)p4;//问题二:编译通过,运行时也通过Object obj = new Woman();Person p = (Person)obj;//问题三:编译不通过//Man m5 = new woman();//String str = new Date();//Object o = new Date();//String str1 = (String)o;