java中谈继承概念


前言

在现实生活中继承更多的用于财产方面的继承,而在程序设计当中,谈到的继承和现实生活中的继承是有一定区别的。 程序当中更像是师傅和徒弟。财产继承会给子女进行均分或者怎样,但是徒弟从师傅那里获取的武功都是一样的。

一、继承概念

继承机制:是面向对象程序设计代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用
首先我们写一个狗类和一个猫类:
狗类:

public class Dog2 {
    private String name;
    private String color;
    private String gender;
    private int age;

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

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getGender() {
        return gender;
    }

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

    public int getAge() {
        return age;
    }

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

    public void sleep(){
        System.out.println(name+":睡觉~~~");
    }

    public void eat(){
        System.out.println(name+":吃东西~~~");
    }

    public void bark(){
        System.out.println(name+":汪汪汪~~~");
    }
}

猫类:

public class Cat2 {
    private String name;
    private String color;
    private String gender;
    private int age;

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

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getGender() {
        return gender;
    }

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

    public int getAge() {
        return age;
    }

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

    public void sleep(){
        System.out.println(name+":睡觉~~~");
    }

    public void eat(){
        System.out.println(name+":吃东西~~~");
    }

    public void mew(){
        System.out.println(name+":喵喵喵~~~");
    }
}

将这两个类仔细观察的话,会发现这两个类当中有好多重复的代码,那么我们能否将这些重复的东西提取出来呢?这就是继承在里边完成的事情。

二、继承的语法

在Java中如果要表示类之间的继承关系,需要借助extends关键字,具体如下:
修饰符 class 子类 extends 父类{
// …
}
那么下面对刚才的过程重新编写,创建一个Animal类,首先将它们共性的东西提取出来

public class Animal {
    //这里先把private拿掉,正常设计是要有的
    String name;
    String color;
    String gender;
    int age;

    //构造方法...

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getGender() {
        return gender;
    }

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

    public int getAge() {
        return age;
    }

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

    public void sleep(){
        System.out.println(name+":睡觉~~~");
    }

    public void eat(){
        System.out.println(name+"吃东西~~~");
    }
}

关于猫叫和狗叫这两个是不一样的,无法提取,分别创建一个Dog类和一个Cat类,狗和猫都是动物,只需要让其继承自Animal,好处:重复的方法不需要自己再来实现,直接从父类中继承
Dog类:

public class Dog3 extends Animal{

}

Cat类:

public class Cat3 extends Animal{

}

下面写一个TestAnimal来测试一下:

public class TestAnimal {
    public static void main(String[] args) {
        Dog3 dog=new Dog3();
        dog.name="小七";
        dog.color="金黄色";
        dog.gender="公";
        dog.age=1;

        dog.eat();
        dog.sleep();
        
        System.out.println("=================================");
        
        Cat3 cat=new Cat3();
        cat.name="元宝";
        cat.color="灰色";
        cat.gender="母";
        cat.age=2;
        
        cat.eat();
        cat.sleep();
        
    }
}

会发现虽然我们在Dog3类中什么都没有添加,但程序是可以编译通过的,假如把Dog3中的extends去掉,就会编译报错:
在这里插入图片描述
可是调试运行来看一下到底是调用的哪里的方法:
在这里插入图片描述
Animal可以称为父类或者基类或者超类,Dog类可以称为子类或者派生类。
在此基础上进行扩展:
注意:子类一定要对基类进行扩展,哪怕是增加一个成员变量
Dog类:

public class Dog3 extends Animal{
    public void bark(){
        System.out.println(name+":汪汪汪~~~");
    }
}

Cat类:

public class Cat3 extends Animal{
    public void mew(){
        System.out.println(name+":喵喵喵~~~");
    }
}

TestAnimal类:

public class TestAnimal {
    public static void main(String[] args) {
        Dog3 dog=new Dog3();
        dog.name="小七";
        dog.color="金黄色";
        dog.gender="公";
        dog.age=1;

        dog.eat();
        dog.sleep();
        dog.bark();

        System.out.println("=================================");
        Cat3 cat=new Cat3();
        cat.name="元宝";
        cat.color="灰色";
        cat.gender="母";
        cat.age=2;

        cat.eat();
        cat.sleep();
        cat.mew();
    }
}

运行结果:
在这里插入图片描述
在这里插入图片描述
注意
1.子类会将父类中的成员变量或者成员方法继承到子类中,注意:基类中构造方法没有被子类继承
2.子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dhdhdhdhg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值