Java继承和多态

血红的双手。 提交于 2020-02-26 12:06:02

一、继承

1.定义:

当我们定义很多部分具有相同的属性和行为的类时,为了允许使用现有类的功能,并在无需改写原来的类的情况下,引入继承的概念。
我们把允许重用现有类称为基类(父类),由基类派生出来的类称为派生类(子类)。

2.基本语法:


```java
class 类名 extends 父类名{
}

java类的继承通过关键字extends完成,子类继承父类所有的属性和行为。
如果没有指定的父类,那么java编译器默认该类的父类为Object。
代码示例:

class Animal{
    protected String name;
    protected int age;
    protected String sex;
    public Animal(String name){
         this.name = name;
   }
   public void eat(){
   System.out.println(name+" eat");

   }
}
class Cat extends Animal{
    public Cat(String name){
    //编译器默认调用的是父类的默认构造函数,super()可以省略
          super(name);//如果父类只有一个带参数的构造函数,这里不能省略
          this.name = name;
    }
    public void catchMice(){
         System.out.println(name+"catchmice");
    }
}

3.继承和组合的关系:

继承是建立一个新类,将其作为现有类的一个类型存在。我们可以采用现有类的形式,并在其中添加新代码。
组合是在新类里简单的创建原有类的对象,这种方法称为组合关系,因为新类是由现有类的对象合并而成。

4.super关键字的使用:

1>用于从派生类访问基类的成员
2>派生类要调用基类的构造方法super(),super()只能在派生类的构造方法中调用,位于方法首行
3>调用基类已被其他方法重写的方法
4>访问基类的数据成员:super.成员变量、super.成员方法

5.函数重写:

1>重写的实现原理:

子类方法实现将从父类继承下来的方法实现,进行了地址覆盖。

2>重写应满足下列条件:

(1)派生类中该方法的返回值和基类同名方法的返回值相同,参数列表相同
(2)派生类中的重写方法的访问权限不能比基类小。(权限的顺序为:public,protected,private)
(3)基类的abstract方法必须被派生类重写,否则派生类也必须是abstract
(4)基类的final方法不能被派生类重写

3>重写和重载的区别:

(1)所处作用域范围不同。重载是在同一个类中进行方法的定义,重写则是在父子类中进行方法的定义。
(2)定义方法不同。重载是方法名相同,参数列表不同,重写是方法名相同参数列表也相同。

二、多态

1.定义:

一个函数名根据对象不同对应不同实现

2.发生多态的三个条件:

1>继承
2>方法的重写
3>父类引用引用派生类对象(向上造型:基类的引用,引用的是派生类对象)

3.多态的实现原理:

地址覆盖

4.静多态:

静多态也称编译期多态,即方法重载。相同的函数名,根据形参类型个数的不同调用不同的方法。在编译期间就已经确定要调用的方法。
重载条件:在一个类,函数名相同,参数列表不同。

5.动多态:

动多态也称运行期多态,即方法重写

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!