【Java】类和对象(下)

继java的类和对象上,类和对象下相对比较深入,以及更难理解与掌握。
一、继承
Java里的继承是单继承的,没有C++里的多继承,且相对简单。
继承关键字为extends
一个子类只能有一个父类,但一个父类可有多个。
在继承关系中,子类会自动继承父类的方法,但有时需要在子类中对继承的方法进行重写,就叫对父类的重写。
子类访问父类的成员需要运用关键字super()。
格式为:super.成员变量
super.成员方法(参数1,参数2)
final关键字:用这个关键字修饰的类是没有子类的,叫最终类。此关键字可修饰方法,修饰类,以及修饰变量。

二、抽象类和接口

1、抽象类:抽象的类里不一定包含抽象的方法,但抽象的方法一定在抽象的类里。
抽象的类只有方法头,没有方法体。
为什么会有抽象的类??是为了满足不同的需求或者该方法的实现过程是不确定的。
关键字:abstract
注意:如果想调用抽象类里的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。
子类实现了父类的抽象方法后,可以正常实例化,并通过实例化对象调用
2、接口:如果一个抽象类中的所有方法都是抽象的,则可以用接口来表示这个类。
关键字:interface
一个接口可以继承多个父接口,之间用逗号隔开。一个类在继承类的同时还可以实现多个接口。
声明接口格式:public interface 接口名 { public abstract 返回值 抽象方法名(参数列表);}
接口实现声明格式为:修饰符 class 类名 implements 接口1 ,接口2·······
三、多态
object类:equals():判断其他某个类是否与此对象相等
getClass():返回此object的运行时类
hashCode():返回该对象的哈希码值
toString():返回该对象的字符串表示

接下来用一个实例来说明:


/*
 * 交通工具类
 */
public abstract class Transportation {
        private String number;//编号
        private String model;//型号
        private String admin;//运输负责人
        //有参的构造方法
        public Transportation(String number,String model,String admin)
        {
            this.setNumber(number);
            this.setModel(model);
            this.setAdmin(admin);
        }

        public abstract void transport();

        public void setNumber(String number) {
            this.number = number;
        }
        public String getNumber() {
            return number;
        }
        public void setModel(String model) {
            this.model = model;
        }
        public String getModel() {
            return model;
        }
        public void setAdmin(String admin) {
            this.admin = admin;
        }
        public String getAdmin() {
            return admin;
        }
}



//保养
public interface Careable {
        public abstract void upKeep(); 
}


//运输类
public class Ztransportation extends Transportation implements Careable {

    public Ztransportation(String number, String model, String admin) {
        super(number, model, admin);
        // TODO Auto-generated constructor stub
    }

    //继承父类Transportation的方法
    public void transport() {
        // TODO Auto-generated method stub
            System.out.println("运输进行中····");
    }

    @Override
    //重写接口的方法
    public void upKeep() {
        // TODO Auto-generated method stub
        System.out.println("车辆保养完毕!");
    }
}
//运送货物
public class SendTask {
    private String number;//快递单号
    private double goodsWeight;//货物重量
    //有参的构造方法
    public SendTask(String number,double goodsWeight)
    {
        this.setNumber(number);
        this.setGoodsWeight(goodsWeight);
    }
    //送单之前需检验
    public void Sendbefore()
    {
        System.out.println("订单开始处理,仓库验货中···");
        System.out.println("货物重量:"+ this.getGoodsWeight()+"Kg");
        System.out.println("货物检验完毕");
        System.out.println("货物填装完毕");
        System.out.println("订单号为:"+this.getNumber());
    }
    //发送货物
    public void Send(Transportation t)
    {
        System.out.println("运货人:"+t.getAdmin()+"货车编号:"+ t.getNumber()+"货车型号"+t.getModel());
        t.transport();
    }
    //货物已送
    public void SendAfter(Transportation t)
    {
        System.out.println("货物已送达!");
        System.out.println("运货人:"+t.getAdmin()+"货车编号:"+ t.getNumber()+"货车型号"+t.getModel()+"已归还");
    }
    public void setGoodsWeight(double goodsWeight) {
        this.goodsWeight = goodsWeight;
    }
    public double getGoodsWeight() {
        return goodsWeight;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getNumber() {
        return number;
    }
}

//测试类


public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
            SendTask sendtask = new SendTask("hg666666",10.0);
            Ztransportation t = new Ztransportation("陕A66666","五菱","小五");
            sendtask.Sendbefore();
            sendtask.Send(t);
            sendtask.SendAfter(t);
            t.upKeep();
    }
}

运行结果如下:

这里写图片描述

四、异常

有时我们会在不希望程序出错的情况下出错它却出错了,当然我们都不希望程序出错。我们需要进行异常处理。
异常类在程序中提供了很多的处理函数。
Throwable 有直接的两个子类:error类和Exception类
1、出现异常时,我们通常有两种方法解决:一是异常捕获,二是抛出异常
异常捕获:
关键字:try{ 可能出错的程序 }catch(Exception e ){System.out.println(“捕获的异常信息为:”+e.getMessage);}
抛出异常:
关键字:throws(跟在需要的类名后面) throw(抛出异常语句)在使用这类语句时,需要在main中使用try catch 来捕获异常。

2、自定义异常:
自定义方式如下:所有的异常类都继承于Exception

public class DivideException extends Exception
    {
        public DivideException(String message)
        {
            super(message);
        }
    }
    //使用throw关键字声明异常对象:
    throw new DivideException("可能出错的信息");
    //调用
    try
    {
      可能出错的程序语句
    }catch(Exception e )
    {
        System.out.println("捕获的异常信息为:"+e.getMessage);
    }

这里特别提醒的是在自定义了异常类后调用时一定注意throw和throws,以及在主语句里的捕获异常(即try····· catch····)不要忘了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值