zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言/C++常见习题问答集锦(三十七) 抽象的猫还是具体的狗

C++C语言抽象 常见 还是 具体 习题 集锦
2023-09-14 09:01:32 时间

C语言/C++常见习题问答集锦(三十七) 抽象的猫还是具体的狗

程序之美

在这里插入图片描述

继承定义

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的格式

class 父类 {
}
 
class 子类 extends 父类 {
}

下面我们以猫狗案例来具体看看继承的实质。

猫狗案例讲解
先找到具体的事物,然后发现具体的事物有共性,才提取出一个父类。

    猫:
        成员变量:姓名,年龄,颜色
        构造方法:无参,带参
        成员方法:
            getXxx()/setXxx()
            eat()
            palyGame()
    狗:
        成员变量:姓名,年龄,颜色
        构造方法:无参,带参
        成员方法:
            getXxx()/setXxx()
            eat()
            lookDoor()
            
    共性:
        成员变量:姓名,年龄,颜色
        构造方法:无参,带参
        成员方法:
            getXxx()/setXxx()
            eat()
            
    把共性定义到一个类中,这个类的名字叫:动物。
    动物类:
        成员变量:姓名,年龄,颜色
        构造方法:无参,带参
        成员方法:
            getXxx()/setXxx()
            eat()
            
        猫:    
            构造方法:无参,带参
            成员方法:palyGame()
        狗:
            构造方法:无参,带参
            成员方法:lookDoor()

在这里插入图片描述

代码实现

//定义动物类
class Animal {
    //姓名
    private String name;
    //年龄
    private int age;
    //颜色
    private String color;
    
    public Animal() {}
    
    public Animal(String name,int age,String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }
    
    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 getColor() {
        return color;
    }
    
    public void setColor(String color) {
        this.color = color;
    }
    
    public void eat() {
        System.out.println("不要睡了,该吃饭了");
    }
}

//定义猫类
class Cat extends Animal {
    public Cat() {}
    
    public Cat(String name,int age,String color) {
        super(name,age,color);
    }
    
    public void playGame() {
        System.out.println("猫玩英雄联盟");
    }
}

//定义狗类
class Dog extends Animal {
    public Dog() {}
    
    public Dog(String name,int age,String color) {
        super(name,age,color);
    }
    
    public void lookDoor() {
        System.out.println("狗看家");
    }
}

//测试类
class ExtendsTest5 {
    public static void main(String[] args) {
        //测试猫
        //方式1
        Cat c1 = new Cat();
        c1.setName("Tom");
        c1.setAge(3);
        c1.setColor("白色");
        System.out.println("猫的名字是:"+c1.getName()+";年龄是:"+c1.getAge()+";颜色是:"+c1.getColor());
        c1.eat();
        c1.playGame();
        System.out.println("---------------");
        
        //方式2
        Cat c2 = new Cat("杰瑞",5,"土豪金");
        System.out.println("猫的名字是:"+c2.getName()+";年龄是:"+c2.getAge()+";颜色是:"+c2.getColor());
        c2.eat();
        c2.playGame();

		//作业:测试狗
		//方式一
		Dog d1 = new Dog();
		d1.setName("皮毛");
		d1.setAge(5);
		d1.setColor("黑色");
		System.out.println("狗的名字是"+d1.getName()+",他今年"+d1.getAge()+"岁了,它的颜色是:"+d1.getColor());
		d1.eat();
		d1.lookDoor();
		//方式二
		Dog d2 = new Dog("皮毛2",4,"白色");
		System.out.println("狗的名字是"+d2.getName()+",他今年"+d2.getAge()+"岁了,它的颜色是:"+d2.getColor());
		d2.eat();
		d2.lookDoor();
    }
}

在这里插入图片描述

注意事项:

1、Java之中只允许多层继承,不允许多重继承,Java存在单继承局限。
2、对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。
3、在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。