java学习笔记:继承

什么是继承?

继承是面向对象编程的三大特征之一,它让我们更加容易实现对于已有类的扩展、更加容易实现对于现实世界的建模。

继承有什么作用

继承主要有两个作用,第一:代码复用,更加实现类的扩展。第二:方便对事物建模

继承的实现

继承让我们更加容易实现类的扩展。 比如,我们定义了人类,再定义Boy类就只需要扩展人类即可。实现了代码的重用,不用再重新发明轮子(don’t reinvent wheels)。
代码中继承使用extends来实现;从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。比如:
在这里插入图片描述
上图中哺乳动物是动物的子类,所以动物中的特性哺乳动物都会继承下来;在我们编程中,如果新定义一个Student类,发现已经有Person类包含了我们需要的属性和方法,那么Student类只需要继承Person类即可拥有Person类的属性和方法。

示例:使用extends来实现继承
public class AnimalTest {
public static void main(String[] args) {
        Anmial a1=new dog();
        Anmial a2=new cat();
        a1.eat();
        a1.work();
        a2.eat();
        a2.work();
    }
}
//创建父类 Animal
class Anmial{
public void eat(){}
public void work(){}
}
//dog子类继承父类Animal
class dog extends Anmial{
	 public void eat(){
		    System.out.println("dog:eat bone!");
    }
	   public void work(){
	        System.out.println("work:look home!");
	    }
}
//cat子类继承父类Animal
class cat extends Anmial{
    public void eat(){
        System.out.println("cat:cat eat mouse!");
}
    public void work(){
        System.out.println("work:cat catch mouse!");
}
}

上述代码是一个简单的猫狗继承代码,执行结果如下
在这里插入图片描述

继承使用要点

1.父类也称作超类、基类。子类:派生类等。
2.Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
3.Java中类没有多继承,接口有多继承。
4.子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。

方法重写

子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。例如上述猫狗代码就使用了方法重写

方法重写的要点、

1.“= =”: 方法名、形参列表相同。
2.“≤”:返回值类型和声明异常类型,子类小于等于父类。
3.“≥”: 访问权限,子类大于等于父类。

继承和组合

我们可以通过继承方便的复用已经定义类的代码。还有一种方式,也可以方便的实现“代码复用”,那就是:“组合”。
“组合”不同于继承,更加灵活。
“组合”的核心就是“将父类对象作为子类的属性”,然后,“子类通过调用这个属性来获得父类的属性和方法”。
例如;

package com.company;

public class classs{
    public static void main(String[] args) {

        Student student=new Student(100, "zhou", "java");
        student.person.rest();
        student.study();
    }
}
class Person{
    int id;
    String name;
    public Person() {
        // TODO Auto-generated constructor stub
    }
    public void rest() {
        System.out.println("休息一下!");
    }
}
class Student{
    Person person=new Person();
    String major;
    public void study() {
        System.out.println("马上学习!");
    }
    public Student(int id,String name,String major) {
        this.person.name=name;
        this.person.id=id;
        this.person.rest();
        this.major=major;

    }
}

组合比较灵活。继承只能有一个父类,但是组合可以有多个属性。所以,有人声称“组合优于继承,开发中可以不用继承”,但是,不建议大家走极端。

继承除了代码复用、也能方便我们对事务建模。所以,对于“is -a”关系建议使用继承,“has-a”关系建议使用组合。

比如:上面的例子,Student is a Person这个逻辑没问题,但是:Student has a Person就有问题了。这时候,显然继承关系比较合适。

再比如:笔记本和芯片的关系显然是“has-a”关系,使用组合更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值