继承

发表时间:2017-05-08 16:31:47 浏览量( 23 ) 留言数( 0 )

学习目标:

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

/**
 * 动物类
 */
public class Animals {
}

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

/**
 * 食肉类动物
 * extends-- 继承
 */
//              子类      继承       父类
public class Carnivorous extends  Animals{
}

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

/**
 * 食草类动物
 * extends-- 继承
 */
//              子类      继承       父类
public class Herbivorous extends Animals{
}

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

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

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类的对象。然后运行。

  public class Run {
   public static void main(String[] args) {
         Carnivorous carnivorous=new Carnivorous();
   }
}

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

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

  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关键字。

/**
 * 食肉类动物 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中的方法。

         Animals animals=new Animals();
       animals.toString();
       animals.equals(null);
       animals.notify();