一、今日学习内容:
今天主要学习的还是继承和多态那部分的知识点:
一、继承:
1、顶层基类Object
在Java中,所有的类都派生自Object。
在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。
2、方法覆盖要点:
方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)!
在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
Java方法覆盖的基本规则:
(1)覆盖方法的允许访问范围不能小于原方法。
(2)覆盖方法所抛出的异常不能比原方法更多。
(3)声明为final方法不允许覆盖。 例如,Object的getClass()方法不能覆盖。
(4)不能覆盖静态方法。
二、多态:
1、多态定义:
“多态性”一词最早用于生物学,指同一种族的生物体虽然具有相同的本质特性,但在不同的具体环境下又有可能呈现出不同的特性。
就是说, 相同的一条语句,在不同的运行环境中可以产生不同的运行结果。
2、多态概念的关键点:
多态的最本质特征就是父类(或接口)变量可以引用子类(或实现了接口的类)对象。
换句话说:子类对象可以被当成基类对象使用!
其典型代码如下所示:
Parent p=new Child();
IMyClass obj=new MyClass();
总是可以让更一般的对象容纳更具体化的对象.
特别地,Java类库的最顶层类是Object。
因此每个对象都可以赋值给Object变量。
3、Java中子类与基类变量间的赋值
子类对象可以直接赋给基类变量。
基类对象要赋给子类对象变量,必须执行类型转换, 其语法是:
子类对象变量=(子类名)基类对象名;
也不能乱转换。如果类型转换失败Java会抛出以下这种异常:
ClassCastException
4、怎样判断对象是否可以转换:
可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:
Object obj="Hello";
if(obj instanceof String)
System.out.println("obj对象可以被转换为字符串");
5、子类、父类拥有同名的方法时:
当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。 这个特性实际上就是面向对象“多态”特性的具体表现。
如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。
如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。 如果子类被当作父类使用,则通过子类访问的字段是父类的!
牢记:在实际开发中,要避免在子类中定义与父类同名 的字段。不要自找麻烦!——但考试除外,考试 中出这种题还是可以的。
6、当多个类实现同一接口(或派生自同一抽象类)时,针对这些类所创建的对象调用接口所定义的方法时,会分别调用相应的类的具体实现代码
7、多态编程有两种主要形式:
(1)继承多态:示例程序使用的方法。
(2)接口多态:使用接口代替抽象基类。
8、使用多态最大的好处是:
当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个“较”字!程序规模越大,其优势就越突出。
二、遇到的问题:
没有遇到什么问题。
三、明日学习计划:
明天研究四则运算代码。