17、继承

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度

学习过程:

一、什么是继承

在面向对象的抽象思维中复用是一个非常重要的理念。我们可以通过封装方法来复用,不过在面向对象中还可以通过继承实现复用。通过抽象出公共部分封装到一个类中,我们成为父类,再声明一系列有同样操作行为的类去继承他,彼此形成父子的层次关系。这样的设计非常有用,也跟现实世界的事物非常之贴近。

我们可以很容易举出很多例子,比如我们小学时候学过的生物知识,如下图所示:

attcontent/d3d8063e-7b18-4799-ae2c-c5f6c0adf26b.png

简单点来画:

attcontent/208b1873-e355-4c33-8c19-26755cdaceef.png

当然我更喜欢这样画:

attcontent/ee089575-f313-4645-aa90-6b233d12bfc5.png

可以看出子类是对父类的扩充,子类包含了父类的属性和方法(当然不是全部,以后再说)。

二、继承有什么作用

这样组织类之间的关系有什么好处呢。从上面的图示我们可以总结如下:

1、具有层次结构

2、子类继承了父类的属性和方法,父类的属性和方法可用于子类

3、代码的可重用性

4、可以轻松地自定义子类

5、设计应用程序变得更加简单

三、java如何实现继承

我们就按照上面的图示建立先建立一个动物类Animals

1

2

3

4

5

/**

 * 动物类

 */

public class Animals {

}

我们可以通过extends关键字实现继承关系,我们可以新建一个Carnivorous类,继承上面的Animals类

1

2

3

4

5

6

7

/**

 * 食肉类动物

 * extends-- 继承

 */

//              子类      继承       父类

public class Carnivorous extends  Animals{

}

再建立一个Herbivorous类,也可以继承Animals类

1

2

3

4

5

6

7

/**

 * 食草类动物

 * extends-- 继承

 */

//              子类      继承       父类

public class Herbivorous extends Animals{

}

我们要注意的是java是单继承的,这一点可以和C++语言对比一下,C++是多继承的。单继承就是只能继承一个父类,不可以有多个父类。一个父类可以派生很多子类,这点和我们的现实世界一样,比较每个人都只有一个父亲,但是一个父亲可以有很多儿子(计划生育的除外)。

我们在Animals类中定义几个属性、普通方法和一个显示的构造方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public class Animals {

    String name;// 名称

    boolean gender;// 性别

    int age;

     

    public Animals() {

        System.out.println("新建一个动物");

    }

     

    public void eat() {

        System.out.println("动物吃东西");

    }

     

    public void test() {

        System.out.println("修饰符测试");

    }

}

再建立一个Run类,在Run类中我们先构造一个Carnivorous类的对象。然后运行。

1

2

3

4

5

  public class Run {

   public static void main(String[] args) {

         Carnivorous carnivorous=new Carnivorous();

   }

}

控制会先输出父类的构造方法,也就是说在构造对象时会先调用父类构造方法,再调用子类构造方法。

然后我们可以直接使用在Animals类中定义的属性和方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

  public class Run {

    public static void main(String[] args) {

            Carnivorous carnivorous=new Carnivorous();

             

            //可以直接继承和使用父类的属性

            carnivorous.age=11;

            carnivorous.gender=true;

            carnivorous.name="名称";

            //也可以直接调用父类的方法

            carnivorous.eat();

             

            Herbivorous herbivorous=new Herbivorous();

            //可以直接继承和使用父类的属性

            herbivorous.age=11;

            herbivorous.gender=true;

            herbivorous.name="名称";

            //也可以直接调用父类的方法

            herbivorous.eat();

    }

}

当然我们可以在子类中定义属于自己的方法,如果我们想要在子类中使用父类的方法也可以使用super关键字。

1

2

3

4

5

6

7

8

9

10

11

12

/**

 * 食肉类动物 extends-- 继承

 */

// 子类 继承 父类

public class Carnivorous extends Animals {

    public Carnivorous() {

        super();// 显示调用父类的构造方法

    }

    public void test() {

        super.eat();// 显示调用父类的方法

    }

}

四、Object类

java中Object是所有java类(包括自定义类)的父类。Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。可以使用类型为Object的变量指向任意类型的对象。

我们可以在Run类中定义Animals类的对象,Animals类虽然没有继承任何类,但是会继承Object类。所有Run类可以调用Object中的方法。

1

2

3

4

         Animals animals=new Animals();

       animals.toString();

       animals.equals(null);

       animals.notify();

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/82744525
17