Java继承问题

在现实生活中个体和个体之间是存在各种各样关联的.比如学生和学生用的电脑.那学生和电脑之间就是一种使用关系.比如人和手机.是拥有关系.

继承和上面一样也是这些关系中的一种.我们通过一个判断语句来判断是否符合继承:is – a.比如 is – a 老鼠.从现实生活中的逻辑上来看,猫不是一个老鼠,就代表代码中猫这个类不可以继承老鼠这个类.再比如手机 is – a 移动设备.这个判断是成立的,所以在代码中我们可以让描述手机的类继承描述移动设备的类.

在代码中使用extends关键字来表达继承关系.其本质目的是为了实现对已有的扩展.

派生类(子类) extends 基类(父类).对移动设备进行功能扩展得到手机,所以派生类是手机,基类是移动设备.

从功能上来说,派生类的功能比较多.因为基类是被派生的,所以基类有的,派生类都有,但是派生类有的,基类不一定有.

例如:

Person类:(父类)

public class Person {
    private String name;
    private int    age;
    private String gender;

    public Person()
    {

    }
    public Person(String name,int age,String gender)
    {
        this.name = name;
        this.age  = age;
        this.gender = gender;
    }

    public String getPerson()
    {
        return name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}


Employee子类: (继承Person类)

public class Employee extends Person{
    private String job;

    public Employee()
    {

    }
    public Employee(String job)     //要调用父类的构造方法,需要把父类的有参构造方法的参数传到子类参数表中
    {
        //super(参数)   对构造方法的调用,这个地方super()方法来调用父类有参构造,并将父类的参数填入super中
        this.job = job;
    }
    public String getJob()
    {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

//    public boolean equal(Employee emp)
//    {
//        if(this.getName().equals(emp.getName())
//                && this.getAge() == emp.getAge()
//                && this.getGender().equals(emp.getGender())
//                && this.getJob().equals(emp.getJob()))
//        {
//            return true;
//        }
//        else
//        {
//            return  false;
//        }
//    }
    @Override       //重写父类的方法
    //Employee类继承于Person类,Person类继承于object类,所以Employee类也继承于object类
    public boolean equals(Object obj)
    {
        Employee emp = (Employee)obj; //类型强转,Object 小转大 Employee,必须强转

        if(this.getName().equals(emp.getName())
                && this.getAge() == emp.getAge()
                && this.getGender().equals(emp.getGender())
                && this.getJob().equals(emp.getJob()))
        {
            return true;
        }
        else
        {
            return  false;
        }
    }
}

特别注意:

       在子类Employee中,用到了一个"@Override",这一条语句的主要作用是重写父类方法,就是如果在子类中有一个和父类里一毛一样的方法,在子类中又想要重新定义,那么在该方法的上方就加上"@Override"这条语句;

        在这个子类中,equals()这个方法并不是父类Person类的方法,而是API已经写好的方法,这个方法位于Object类中,然而Person这个类是继承Object这个类的,然后Employee这个类又继承Person类,所以,对于Object类来说,Employee类也是Object类的子类,所以,在子类里重写了父类的方法.

        还需要提一点: 在子类中如果需要调用父类的有参构造方法,可以使用如下方法:

                在子类构造函数中的第一行加上super(),在这个方法里面填写父类有参构造方法的参数;例如:

public Person(String name,String num)
{
     this.name = name;
     this.num  = num;
}
         super()必须在第一行(注释除外); 在无参构造方法中,super()是隐藏的.
                
public Employee(int index,String name,String num)
{
    super(name,num);
    this.index = index;
}



测试类TestPerson:

public class TestPerson {
    public static void main(String[] args)
    {
        Employee em1 = new Employee();
        Employee em2 = new Employee();

        em1.setName("Jams");
        em1.setAge(33);
        em1.setGender("男");
        em1.setJob("篮球运动员");

        em2.setName("Kobe");
        em2.setAge(45);
        em2.setGender("男");
        em2.setJob("篮球运动员");

        System.out.println("两个人的信息如下:");
        System.out.println("name:"+em1.getName()+"age:"+em1.getAge()+"gender:"+em1.getGender()+"job:"+em1.getJob());
        System.out.println("name:"+em2.getName()+"age:"+em2.getAge()+"gender:"+em2.getGender()+"job:"+em2.getJob());
        System.out.println("判断两个人是否相等:");
        System.out.println(em1.equals(em2));
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值