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、在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。
相关文章
- C++ 学习之旅二——说一说C++头文件
- C/C++学习----使用C语言代替cmd命令、cmd命令大全
- C语言/C++基础之爱心程序源码(附源码)
- C语言/C++基础之雪绒花
- C语言/C++基础之火车快跑
- C语言/C++基础之移动的汽车
- C语言/C++基础之弹跳的小球
- C语言/C++常见习题问答集锦(七十八)之数字流星雨
- C语言/C++常见习题问答集锦(七十六)之玫瑰花寄语
- C语言/C++常见习题问答集锦(七十三) 之迷宫不能迷
- C语言/C++常见习题问答集锦(六十七) 之版本号PK
- C语言/C++常见习题问答集锦(六十四) 之兔子繁殖(递归与非递归)
- C语言/C++常见习题问答集锦(三十六)之两个浮点数相加的遐想
- C语言/C++常见习题问答集锦(十一)
- c++模板学习06之类模板与函数模板区别
- Computer:C语言/C++语言的简介、发展历史、应用领域、编程语言环境IDE安装、学习路线之详细攻略
- Algorithm:C++语言实现之概率算法相关问题(计算机中的概率事件、C语言中的随机事件、产生二维随机数、圆内均匀取点)
- c++11 测量时间
- C++ std::vector 一维 二维数组 初始化为0
- C++ 对象的内存布局
- C++14智能指针make_unique(八十一)
- VC++ 强杀线程