Java三大特性(封装,继承,多态)之一 -----继承

目录

 

一、继承的基本概念与规则

     1.继承的概念

     2.继承的关键字

     3.继承的结果

二、继承代码

     1.继承之---最简单继承

     2.继承之---构造器加入

      3.继承之---多态转型

      3.继承之---抽象类接口

三、继承的优势和使用


 

一、继承的基本概念与规则

     1.继承的概念

继承是两个类之间的一种特殊关系。例如儿子类和父亲类,儿子继承父亲类。儿子类(子类),父亲类(父类)。

     2.继承的关键字

  • extends  例如: A类 extends  B类,表示A继承了B。
  • super   在构造器中会讲到,是在继承中的一种特殊情况。

     3.继承的结果

  • 会继承父类所有的成员(变量和方法),除了private成员和构造器。
  • 子类可以掉用父类protected,public修饰的成员。

二、继承代码

PS:以下会列举四个重点情况

     1.继承之---最简单继承

import java.util.*;
//该类为父类,汽车类
class Vehicle {
    int fatherAge= 40;                //父类的成员变量  Vehicle的使用时间
    public void Vehiclerun() {        //父类的方法
        System.out.println("父类:汽车在跑run1()");
    }
}
//子类继承父类之后,子类还可添加自身方法。
class Bus extends Vehicle {
    //子类所特有的功能
    int sonAge = 18;                //子类自身的成员   Bus的使用时间
    public void busRun() {          //子类自身的方法
        System.out.println("子类:公交车汽车在跑");
    }
}
public class Testinherit {
    public static void main(String[] args) {
        //父类实现
        Vehicle v = new Vehicle();
        v.Vehiclerun();
        System.out.println("使用时间:"+v.fatherAge);

        //子类实现
        Bus b= new Bus();
        b.busRun();
        System.out.println("使用时间:"+b.sonAge);
        //子类调用父类成员
        b.Vehiclerun();
        System.out.println("使用时间:"+b.fatherAge);
    }
}

  结果如下:

分析如下:

  • 在同一个包中新建 Vehicle(父类),Bus(子类),TestInherit(测试类),并建立Bus与Vehicle的继承关系
  • Vehicle(父类)与Bus(子类)中分别创建一个成员变量和成员方法。
  • 在Testinherit测试类中分别实例化父类与子类,再分别用父类对象v调用父类成员,子类对象b调用子类成员
  • 最后两项,用子类对象b调用父类成员

     2.继承之---构造器加入

PS:有了构造器,那么就会有super关键字的使用与重载

  • 首先我们来看看构造器的特点
import java.util.*;
/*PS:此代码由上面代码改变而来,方便理解*/

class Vehicle {
    Vehicle(){
      System.out.println("父类构造器");
    }
    public void Vehiclerun() {        //父类的方法
        System.out.println("父类:汽车在跑run1()");
    }
}
class Bus extends Vehicle {
    Bus(){
        System.out.println("子类构造器");
    }
    public void busRun() {
        System.out.println("子类:公交车汽车在跑");
    }
}
public class Testinherit {
    public static void main(String[] args) {
        Vehicle v = new Vehicle();
        v.Vehiclerun();
        //子类实现
        Bus b= new Bus();
        b.busRun();
        //子类调用父类成员
        b.Vehiclerun();
    }
}

结果如下 :

分析如下:

  • 只要实例化一个对象,就会在实例(使用了new 表示实例和[声明]不同)同时调用该类的构造器(也叫构造函数)
  •  当子类实例化对象时,也会调用父类的无参构造器。(有参构造器请看 重载)
  • 当子类实例化对象时,子类的构造器方法中第一行会用 super(); 调用父类构造器。

  • 若父类构造器有参数,则需要在子类构造器第一行使用super关键字显式调用父类构造器,并且实例化父类构造器也需要传参。
  • import java.util.*;
    
    
    
    /* 最基础继承 */
    
    class Vehicle {
        Vehicle(int m){                /**********************/
          System.out.println("父类构造器"+m);
        }
        public void Vehiclerun() {        //父类的方法
            System.out.println("父类:汽车在跑run1()");
        }
    }
    class Bus extends Vehicle {
        Bus(){
            super(4);                   /*********************/
            System.out.println("子类构造器");
        }
        public void busRun() {
            System.out.println("子类:公交车汽车在跑");
        }
    }
    public class Testinherit {
        public static void main(String[] args) {
            Vehicle v = new Vehicle(3);  /*******************/
            v.Vehiclerun();
            //子类实现
            Bus b= new Bus();
            b.busRun();
            //子类调用父类成员
            b.Vehiclerun();
        }
    }
    

    结果如下:

PS:super:主要存在与子类方法中,用于指向子类对象中的父类对象this当前对象,super,当前对象的父类对象)
                     访问父类成员,构造器(这个不难,就不写了)

      3.继承之---多态转型

      4.继承之---抽象类接口

这两个主要讲的是多态、抽象类、接口等,将会在接下来的文章中介绍。敬请期待!

三、继承的优势和使用

  • 通过继承,可以有效减少代码的重复。有利于程序的维护。

例如:父类有eat(),run()两个成员,(多个)子类需要使用这两个成员,并且还需要加一个sleep()成员。这个时候,如果在子类中重复写eat(),run()这两个成员,这样会十分浪费空间、增加代码赘余等。

  • Object类,在Java.lang中,Object类是一切类的父类(若没有显示指明父类,则默认继承了Object类),所以有equals(),toString()等常用方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值