学习大数据的第12天——继承的小练习

学习大数据的第12天——继承的小练习

  1. 以下关于继承条件下构造方法执行过程的代码的执行结果是( A )。(选择一项)
    class Person {
    public Person() {
    System.out.println(“execute Person()”);
    }
    }
    class Student extends Person {
    public Student() {
    System.out.println("execute Student() ");
    }
    }
    class PostGraduate extends Student {
    public PostGraduate() {
    System.out.println(“execute PostGraduate()”);
    }
    }
    public class TestInherit {
    public static void main(String[] args) {
    new PostGraduate();
    }
    }

    A. execute Person()
    execute Student()
    execute PostGraduate()
    B. execute PostGraduate()
    C. execute PostGraduate()
    execute Student()
    execute Person()
    D. 没有结果输出

  2. 以下关于this和super关键字的说法错误的是( C D )。(选择二项)

    A. this关键字指向当前对象自身,super关键字指向当前对象的直接父类
    B. 在main方法中(不)可以存在this或super关键字,但不能同时存在。
    C. this和super关键字都可以访问成员属性,成员方法和构造方法
    D. 在一个类的构造方法中可以同时使用this和super来调用其他构造方法

  3. 给出下面的代码段,在代码说明//assignment x=a,y=b处写入如下( D )个代码是正确的。(选择一项)
    public class Base {
    int w, x, y, z;
    public Base(int a, int b) {
    x = a;
    y = b;
    }
    public Base(int a, int b, int c, int d) {
    // assignment x=a,y=b
    w = d;
    z = c;
    }
    }

    A Base(a,b);
    B. x=a,y=b;
    C. this(a),this(b);
    D. this(a,b)

  4. 以下Java程序编译运行后的输出结果是( A )。(选择一项)
    class HelloA {
    public HelloA( ) {
    System.out.println(“HelloA”);
    }
    { System.out.println(“I’m A class”);
    }
    static {
    System.out.println(“static A”);
    }
    }
    public class HelloB extends HelloA {
    public HelloB( ) {
    System.out.println(“HelloB”);
    }
    { System.out.println(“I’m B class”);
    }
    static {
    System.out.println(“static B”);
    }
    public static void main(String[] args) {
    new HelloB( );
    }
    }

static A
static B
I’m A class
HelloA
I’m B class
HelloB

  1. 下列选项中关于Java中super关键字的说法正确的是( AB )。(选择二项)

    A super关键字是在子类对象内部指代其父类对象的引用
    B. super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
    C. 子类通过super关键字只能调用父类的方法,而不能调用父类的属性
    D. 子类通过super关键字可以调用父类的构造方法

二、判断题
1.如果定义一个类时没有使用extends,则它的父类是java.lang.Object。( T )
2.对子类实例化对象需要调用超类的构造函数进行初始化工作,完成对子类中的超类实例变量的初始化,则子类可以继承超类的构造函数。( F )
3.在Java中任何一个子类的构造方法都必须调用其父类的构造方法(包括隐式调用),并且调用父类的构造方法的语句必须是子类构造方法的第一条语句。( T )
4.Java中的类不允许多重继承,一个类只能有有一个直接父类。(T)
5.Object类有一个public方法是toString( ),一个对象通过调用该方法可以获得该对象的字符串表示。( T )
6.父类Person中定义了一个private void show()的方法,那么子类要重写这个方法时,方法的访问修饰符可以是默认的,protected或public。( F )
7.运算符“==”用于比较引用时,如果两个引用指向内存同一个对象,则返回true。( T )???题目什么意思

三、简答题
1.方法重载和方法重写(覆盖)的区别。
重载:在同一个类中,方法名相同,参数列表不同,返回值无关
重写:前提得有继承,子类对付类的方法重写,方法相同(方法名相同、参数列表相同、返回值一样)、方法体中的内容不同。重载的英文单词:overload
重写的英文单词:override
2.继承条件下子类构造方法的执行过程
1、栈开辟空间
2、堆开辟空间给对象
3、成员变量的值是系统默认值
4、成员变量显示赋值
5、父类的构造方法赋值
6、子类的构造方法赋值
3.super关键字的作用和使用
1、调用父类的成员(成员变量、成员方法、构造方法)
2、Super.成员变量、super.方法名(参数列表)
4.和equals()的联系和区别
比较对象不同
首先了解基础数据类型和引用类型:
八大基础数据类型:Byte、short、int、long、double、float、boolean、char
引用类型主要是一些类、接口、数组
引用类型变量中存储的是地址,对应的地址存储数据
“:== 在基本数据类型:值内容, 引用类型时:地址
equals 重写:值内容 , equals不重写:地址

代码题

/*
    1.编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。(7分)
        提示:
        (1)编写一个圆类Circle,该类拥有:
            1)一个成员变量,radius(私有,浮点型);//存放圆的半径;
            2)两个构造方法
                Circle()              //将半径设为0
                Circle(double  r )    //创建Circle对象时将半径初始化为r
            3)三个成员方法
                double getArea()      //获取圆的面积
                double getPerimeter()  //获取圆的周长
                void show()           //将圆的关径、周长、面积输出到屏幕
       (2) 编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:
            1)一个成员变量,double hight  (私有,浮点型);  //圆柱体的高;
            2)构造方法
            //创建Cylinder对象时将半径初始化为r,高度初始化为h
                Cylinder(double r,double h)
            3)成员方法
                double getVolume()            //获取圆柱体的体积
                void showVolume()             //将圆柱体的体积输出到屏幕
 */
class Circle {
    private double radius;

    Circle() {

    }

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getArea() {
        return 3.14 * radius * radius;
    }

    public double getPerimeter() {
        return 2 * 3.14 * radius;
    }

    public void show(double area, double perimeter) {
        System.out.println("该圆的半径为:" + radius + ",面积为:" + area + ",周长为:" + perimeter);
    }
}

class Cylinder extends Circle {
    private double hight;

    public Cylinder(double radius, double hight) {
        super(radius);
        this.hight = hight;
    }

    public double getVolume() {
        return super.getArea() * hight;
    }

    public void showVolume() {
        System.out.println("该圆柱体的体积为:" +getVolume());
    }
}

public class zy1 {
    public static void main(String[] args) {
        Cylinder c = new Cylinder(2,6);
        c.showVolume();
        c.show(c.getArea(),c.getPerimeter());
    }
}
/*
    2.请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息。
        设定
            1)出租车类:
                属性包括:车型,车牌,所属出租公司;方法包括:启动,停止
            2)家用轿车类:
                属性包括:车型,车牌,车主姓名;方法包括:启动,停止
            要求
                1)分析出租车和家用轿车的公共成员,提取出父类—汽车类
                2)利用继承机制,实现出租车类和家用轿车类
                3)编写测试类,分别测试汽车类,出租车类和家用轿车类对象的相关方法
                4)定义名为car的包存放汽车类,出租车类,家用轿车类和测试类
            运行效果
 */

class Car {
    private String model;
    private String plate;

    Car() {

    }

    Car(String model, String plate) {
        this.model = model;
        this.plate = plate;
    }

    public void start() {

    }

    public void stop() {

    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getPlate() {
        return plate;
    }

    public void setPlate(String plate) {
        this.plate = plate;
    }
}

class Taxi extends Car {
    private String company;

    public Taxi(String model, String plate, String company) {
        super(model, plate);
        this.company = company;
    }
    @Override
    public void start(){
        System.out.println("类型位:"+getModel()+",车牌号位:"+getPlate()+",所属的出租车公司:"+company+"的车子启动了");
    }
    @Override
    public void stop(){
        System.out.println("类型位:"+getModel()+",车牌号位:"+getPlate()+",所属的出租车公司:"+company+"的车子停止了");
    }
}

class Familycar extends Car {
    private String name;

    public Familycar(String model, String plate, String name) {
        super(model, plate);
        this.name = name;
    }
    @Override
    public void start(){
        System.out.println("类型位:"+getModel()+",车牌号位:"+getPlate()+",车主姓名为:"+name+"的车子启动了");
    }
    @Override
    public void stop(){
        System.out.println("类型位:"+getModel()+",车牌号位:"+getPlate()+",车主姓名为:"+name+"的车子停止了");
    }
}

public class zy2 {
    public static void main(String[] args) {
        Taxi t1 = new Taxi("奔驰","皖A1253","海马");
        t1.start();
        t1.stop();
        Familycar f1 = new Familycar("宝马","皖A1254","尚志恒");
        f1.start();
        f1.stop();
    }
}
/*

    3.某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精
    设定
        1)蛇怪类:
            属性包括:怪物名字,生命值,攻击力
            方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值)
        2)蜈蚣精类:
            属性包括:怪物名字,生命值,攻击力
            方法包括:攻击,移动(飞行移动)
        要求
            1)分析蛇怪和蜈蚣精的公共成员,提取出父类—怪物类
            2)利用继承机制,实现蛇怪类和蜈蚣精类
            3)攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力
            4)编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法
            5)定义名为mon的包存怪物类,蛇怪类,蜈蚣精类和测试类
运行效果
 */
class Monster {
    //怪物名字
    private String name;
    //生命值
    private int lifevalue;
    //攻击力
    private int aggressivity;

    public Monster(String name, int lifevalue, int aggressivity) {
        this.name = name;
        this.lifevalue = lifevalue;
        this.aggressivity = aggressivity;
    }

    public void Attack() {
        System.out.println("怪物名字为:" + name + ",血量为:" + lifevalue + ",攻击力为:" + aggressivity + " 正在攻击");
    }

    public String getName() {
        return name;
    }

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

    public int getLifevalue() {
        return lifevalue;
    }

    public void setLifevalue(int lifevalue) {
        this.lifevalue = lifevalue;
    }

    public int getAggressivity() {
        return aggressivity;
    }

    public void setAggressivity(int aggressivity) {
        this.aggressivity = aggressivity;
    }
}

class Snake extends Monster {

    public Snake(String name, int lifevalue, int aggressivity) {
        super(name, lifevalue, aggressivity);
    }

    public void move() {
        System.out.println("怪物名字为:" + getName() + ",血量为:" + getLifevalue() + ",攻击力为:" + getAggressivity() + " 正在曲线移动");
    }

    public void Replenishblood() {
        if (getLifevalue() < 10) {
            int life = getLifevalue();
            life = life + 20;
            setLifevalue(life);
            System.out.println("小东西,俺老"+getName()+"已经加血完成了,你要没了!!");
        }else{
            System.out.println("小东西你的伤害很低,怪物很健康!!");
        }
    }
}

class Centipede extends Monster {

    public Centipede(String name, int lifevalue, int aggressivity) {
        super(name, lifevalue, aggressivity);
    }

    public void move() {
        System.out.println("怪物名字为:" + getName() + ",血量为:" + getLifevalue() + ",攻击力为:" + getAggressivity() + " 正在飞行移动");
    }
}

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

        Snake s1 = new Snake("红🐍",100,5);
        s1.move();
        s1.Attack();
        Centipede c1 = new Centipede("巨型蜈蚣怪",150,10);
        c1.move();
        c1.Attack();
        Snake s2 = new Snake("蓝🐍",8,5);
        s2.Replenishblood();
        s2.Attack();
    }
}
/*

    1.请用面向对象的思想,设计自定义类描述演员和运动员的信息
    设定
        1)演员类:
            属性包括:姓名,年龄,性别,毕业院校,代表作
            方法包括:自我介绍
        2)运动员类:
            属性包括:姓名,年龄,性别,运动项目,历史最好成绩
            方法包括:自我介始
        要求
            3)分析演员和运动员的公共成员,提取出父类—人类
            4)利用继承机制,实现演员类和运动员类
            5)编写测试类,分别测试人类,演员类和运动员类对象及相关方法
            6)定义名为act的包存人类,演员类,运动员类和测试类
 */
class Mankind {
    private String name;
    private int age;
    private String sex;

    public Mankind(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    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 getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void Introduction() {
    }
}

class Actor extends Mankind {
    private String colleges;
    private String work;

    public Actor(String name, int age, String sex, String colleges, String work) {
        super(name, age, sex);
        this.colleges = colleges;
        this.work = work;
    }

    @Override
    public void Introduction() {
        System.out.println("姓名:" + getName() + ",年龄:" + getAge() + ",性别:" + getSex() + ",毕业院校:" + colleges + ",代表作:" + work);
    }
}

class Player extends Mankind {
    private String project;
    private int bestresults;

    public Player(String name, int age, String sex, String project, int bestresults) {
        super(name, age, sex);
        this.project = project;
        this.bestresults = bestresults;
    }

    @Override
    public void Introduction() {
        System.out.println("姓名:" + getName() + ",年龄:" + getAge() + ",性别:" + getSex() + ",运动项目:" + project + ",历史最好成绩:" + bestresults);
    }
}

public class zy4 {
    public static void main(String[] args) {
        Actor actor1 = new Actor("尚志恒", 18, "女", "合肥学院", "没有代表作");
        actor1.Introduction();
        Player player1 = new Player("叶哲良", 20, "男", "标枪", 100);
        player1.Introduction();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值