2020.10.16

、今日学习内容:

今天主要学习的还是继承和多态那部分的知识点:

一、继承:

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、使用多态最大的好处是:

当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个“较”字!程序规模越大,其优势就越突出。

二、遇到的问题:

    没有遇到什么问题。

三、明日学习计划:

    明天研究四则运算代码。

原文地址:https://www.cnblogs.com/marr/p/14174807.html