java练习题(面向对象前两天练习作业(继承多态接口和抽象类))

1.

【编号:1001】一位面向对象的程序员小李,在编程过程中需要描述和处理个人信息,于是定义了类Person,如下所示:
public class Person {
    private String name; // 姓名
    private int age; // 年龄
    private String birthday; // 生日

    /*
    getters and setters请自行生成
    */

    // 获取信息的方法
    public String getInfo() {
        return "Person[name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
    }
}
一周以后,小李又遇到了新的需求,需要描述和处理学生信息,于是他又定义了一个新的类:
public class Student {
    private String name; // 姓名
    private int age; // 年龄
    private String birthday; // 生日
    private String school; // 所在学校

    /*
    getters and setters请自行生成
    */

    // 获取信息的方法
    public String getInfo() {
        return "Student[name=" + name + ", age=" + age + ", birthday=" + birthday + ", school=" + school + "]";
    }
}
观察发现,这两个类的结构太接近了,后者比前者仅多了一个属性,却需要重复定义其他内容。请根据类的继承机制,帮助小李重新设计Student类。并测试获取Student对象的属性信息。

参考答案

public class Student extends Person {
    private String school; // 所在学校

    public Student() {
    }

    public Student(String name, int age, String birthday, String school) {
        super(name, age, birthday);
        this.school = school;
    }

    // 获取信息的方法
    public String getInfo() {
        return "Student[name=" + getName() + ", age=" + getAge() + ", birthday=" + getBirthday() + ", school=" + school + "]";
    }

2.

【编号:1002】请补充下列代码,使测试类编译通过并运行。
        已知代码材料
class Fu {
    public void methodFu(){
        System.out.println("我是父类的method方法");
    }
}

class Zi {

}

public class Demo1 {
    public static void main(String[] args) {
        // 创建子类对象,调用方法
        Zi z = new Zi();
        z.methodFu();
        z.methodZi();
    }
}
运行结果:
        我是父类的method方法
        我是子类的method方法

参考答案

class Zi  extends Fu{
    public void methodZi(){
        System.out.println("我是子类的method方法");
    }
}

3.

【编号:1003】请补充下列代码,使得程序按照顺序分别输出30 20 10//class Fu {
//
//}
//
//class Zi extends Fu{
//    int num = 20;
//    public void method(){
//        int num = 30;
//        // 这里要求输出30
//        System.out.println();
//        // 这里要求输出20
//        System.out.println();
//        // 这里要求输出10
//        System.out.println(super.num);
//    }
//}
//
//public class Demo2 {
//    public static void main(String[] args) {
//        Zi z = new Zi();
//        z.method();
//    }
//}
//运行结果:
//        30
//        20
//        10

参考答案

class Fu {
int num = 10;
}

class Zi extends Fu{
    int num = 20;
    public void method(){
        int num = 30;
        // 这里要求输出30
        System.out.println(num);
        // 这里要求输出20
        System.out.println(this.num);
        // 这里要求输出10
        System.out.println(super.num);
    }
}

4.

 请对下列继承代码进行优化和丰富,使得创建子类对象的时候,可以通过有参构造进行初始化,随后通过getXxx方法获取属性并输出。
class Person{
    private String name;
    private int age;

    public Person() {
    }

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

    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;
    }
}

class Student extends Person {

}

public class Demo3 {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("张三");
        s.setAge(23);
    }
}
运行结果
        张三...23

参考答案

class Person{
    private String name;
    private int age;

    public Person() {
    }

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

    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;
    }
}

class Student extends Person {
    public Student() {
    }

    public Student(String name, int age) {
        super(name,age);
    }
}

public class Demo3 {
    public static void main(String[] args) {
        Student s = new Student("张三",23);
        System.out.println(getName+getAge);
    }
}

5.

某手机系统5版本的时候,引入了【语音助手】的功能,但最开始的【语音助手】只能说英文,后期版本更新到6版本的时候,【语音助手】才能够在说英文的基础上又会说中文,请结合继承的思想,对下列代码进行补充,最终在控制台上输出(speak english)(说中文)
class PhoneVersion5{
    public void speak(){
        System.out.println("speak english");
    }
}

class PhoneVersion6 extends PhoneVersion5 {

}

public class Demo4 {
    public static void main(String[] args) {
        PhoneVersion6 pv6 = new PhoneVersion6();
        pv6.speak();
    }
}
运行结果:
        speak english
        说中文

参考答案

class PhoneVersion5{

    public void speak(){

        System.out.println("speak english");

    }

}



class PhoneVersion6 extends PhoneVersion5 {
    @Override
    public void speak(){

        super.speak();
        System.out.println("说中文");

    }

}



public class Demo4 {

    public static void main(String[] args) {

        PhoneVersion6 pv6 = new PhoneVersion6();

        pv6.speak();

    }

}

6.

 分析事物的共性,并抽取出正确的继承体系 现有基础班老师(BaseTeacher)和就业班老师(WorkTeacher)两个类,两者都含有姓名和年龄两个属性,还有一个讲课的行为teach,但不同的是,基础班老师的teach方法输出【基础班老师讲JavaSE】,就业班老师的teach方法输出【就业班老师讲JavaEE】,请用代码实现。 运行结果:
        张三老师...23
        基础班老师讲JavaSE
        李四老师...24
        就业班老师讲JavaEE

参考答案

public class teacher {
    private String name;
    private int age;

    public teacher() {
    }

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

    public void teach(){
    }
}
public class WorkTeacher extends teacher {
    public WorkTeacher() {
    }

    public WorkTeacher(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("【就业班老师讲JavaEE】");
    }
}
public class BaseTeacher extends teacher{
    public BaseTeacher() {
    }

    public BaseTeacher(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("【基础班老师讲JavaSE】");
    }
}
public class Demo   {
    public static void main(String[] args) {
        BaseTeacher b = new BaseTeacher("张三老师",23);
        WorkTeacher w = new WorkTeacher("李四老师",24);
        b.teach();
        w.teach();
    }
}

7.

结合继承的思想,分析下列需求并实现
定义项目经理类Manager 【属性:姓名 工号 工资 奖金】【行为:工作work】
定义程序员类Coder【属性:姓名 工号 工资】【行为:工作work】
要求:通过有参构造创建两个类的对象,并调用各自的work方法
运行结果:
姓名为:张三,工号为:9527,工资为:10000.0,的程序员正在编写代码
姓名为:李四,工号为:9528,工资为:15000.0,奖金为:2000.0,的项目经理正在管理程序员写代码

参考答案

public class staff {
    private String name;
    private int number;
    private int salary;

    public staff() {
    }

    public staff(String name, int number, int salary) {
        this.name = name;
        this.number = number;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

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

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public void work(){
    }
}
public class Manager extends staff {
    private int bonus;

    public Manager() {
    }

    public Manager(String name, int number, int salary, int bonus) {
        super(name, number, salary);
        this.bonus = bonus;
    }

    public int getBonus() {
        return bonus;
    }

    public void setBonus(int bonus) {
        this.bonus = bonus;
    }

    @Override
    public void work() {
        System.out.println(getName()+",工号为:"+getNumber()+",工资为:"+getSalary()+",奖金为:"+bonus+",的项目经理正在管理程序员写代码");
    }
}
public class Coder extends staff {
    public Coder() {
    }

    public Coder(String name, int number, int salary) {
        super(name, number, salary);
    }

    @Override
    public void work() {
        System.out.println(getName()+",工号为:"+getNumber()+",工资为:"+getSalary()+",的程序员正在编写代码");
    }
}
public class Demo   {
    public static void main(String[] args) {
        Manager m = new Manager("张三",110,0,0);
        Coder c = new Coder("李四",120,0);
        c.work();
        m.work();
    }
}

8.

某公司骨干程序员设计了一个TestA类,该类包含了公司的核心业务逻辑method方法,现需要将TestA交给其他同事去使用,其他同事可以丰富一些新的方法,但不能改动原有功能(不能改method方法实现内容),如果TestA类交给你来写,怎样可以强制method方法不能改?请结合以上信息,将如下代码补齐。
class TestA {
    public void method(){
        System.out.println("我是核心业务逻辑,可以使用,但绝对不能改动!");
    }
}

class TestB {
    /*
        该类需要使用TestA中的method方法,还需要增加一些新的功能
     */
}

public class Demo7 {
    public static void main(String[] args) {
        TestB t = new TestB();
        t.method();
        t.show();
        t.print();
    }
}
运行结果:
        我是核心业务逻辑,可以使用,但绝对不能改动!
        新增加的show方法
        新增加的print方法

参考答案

public class Demo {
    class TestA {
        public final void method(){
            System.out.println("我是核心业务逻辑,可以使用,但绝对不能改动!");
        }
    }

    class TestB extends TestA {
        public  void show(){
            System.out.println("我是show方法");
        }
        public  void print(){
            System.out.println("我是print方法");
        }
    }

    public class Demo7 {
        public static void main(String[] args) {
            TestB t = new TestB();
            t.method();
            t.show();
            t.print();
        }
    }
}

9.

现有两种事物,【手机】和【智能手机】 【手机Phone】带有(属性:品牌brand,价格price)(行为:打电话call,发短信sendMessage,玩游戏playGame) 【智能手机SmartPhone】需要在手机的功能之上,将打电话的功能做进一步增强(视频通话),请结合继承思想来设计两个类,另外,假设所有的手机都有属性屏幕的尺寸(int size),而且假设所有手机的屏幕尺寸为6,该如何补齐下列代码?
public class Demo8 {
    public static void main(String[] args) {
        SmartPhone o = new SmartPhone("大米",2000);
        System.out.println("品牌:" ++ ",价格:" ++ ",尺寸:" +);
        o.call();
        o.sendMessage();
    }
}
运行结果:
        品牌:大米,价格:2000.0,尺寸:6
        打电话
        视频通话
        发短信

参考答案

public class Phone {
    private String brand;
    private int price;
    private final int size=6;

    public Phone() {
    }

    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getSize() {
        return size;
    }
    public void call(){
        System.out.println("打电话");
    }
    public void sendMessage(){
        System.out.println("发短信");
    }
    public void playGame(){
        System.out.println("玩游戏");
    }
}
public class SmartPhone extends Phone {
    public SmartPhone() {
    }

    public SmartPhone(String brand, int price) {
        super(brand, price);
    }

    @Override
    public void call() {
        System.out.println("打开视频模式");
        super.call();
    }
}
public class Demo {
    public static void main(String[] args) {
        SmartPhone o = new SmartPhone("大米",2000);
        System.out.println("品牌:" + o.getBrand() + ",价格:" + o.getPrice() + ",尺寸:" + o.getSize());
        o.call();
        o.sendMessage();
    }
}

10.

请在main方法中通过多态创建对象,随后使用对象,使得程序符合最终运行结果
public class Demo1 {
    /*
        请在main方法中通过多态创建对象,随后使用对象,使得程序符合最终运行结果
     */
    public static void main(String[] args) {

    }
}

class Fu {
    int num = 10;

    public void method(){
        System.out.println("父类的method方法");
    }
}

class Zi extends Fu{
    int num = 20;

    public void method(){
        System.out.println("子类的method方法");
    }

    public void show(){
        System.out.println("子类的show方法");
    }
}
运行结果:
        10
        子类的method方法
        子类的show方法

参考答案

Fu f=new Zi ();
        System.out.println(f.num);
        f.show;
        f.mentod;

11.

定义人(Person),人类中有吃饭方法(eat)和工作方法(work)。
        定义超人(SuperMan)类,超人类中有救人方法(save)并且超人也属于人类。
        要求:使用多态的方式创建超人对象,调用吃饭和工作的方法。再将此对象转为超人对象,调用救人的方法。

参考答案

public class Person {
    public void eat(){
        System.out.println("人类吃饭");
    }
    public void work(){
        System.out.println("人类工作");
    }
}
public class SuperMan extends Person{
    public void save(){
        System.out.println("超人变身");
    }
}
public class Demo {
    public static void main(String[] args) {
        Person p=new SuperMan();
        p.eat();
        p.work();
        SuperMan s=(SuperMan) p;
        s.save();
    }
}

12.

定义动物类 属性:年龄,颜色 生成空参有参构造,set和get方法 行为:eat(String something)方法(无具体行为,不同动物吃的方式和东西不一样,something表示吃的东西)
        定义狗类继承动物类,行为:eat(String something)方法,看家lookHome方法(无参数)
        定义猫类继承动物类,行为:eat(String something)方法,逮老鼠catchMouse方法(无参数)
        定义Person类 生成空参有参构造,set和get方法 属性:(姓名,年龄) 行为:keepPet( ????? ,String something)方法​ 功能:喂养【宠物狗】和【宠物猫】,问号处自己思考,something表示喂养的东西
        定义测试类,使用Perosn对象调用keepPet方法,实现运行结果
        运行结果:
        年龄为30岁的老王养了一只黑颜色的2岁的宠物
        2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃
        年龄为25岁的老李养了一只灰颜色的3岁的宠物
        3岁的灰颜色的猫眯着眼睛侧着头吃鱼

参考答案

package cn.Work1130.homeWork_03;

public abstract 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 abstract void eat(String something);
}
package cn.Work1130.homeWork_03;

public class Cat extends Animal {
    public Cat() {
    }

    public Cat(String name, int age, String color) {
        super(name, age, color);
    }

    @Override
    public void eat(String something) {
        System.out.println(getAge()+"岁的"+getColor()+"颜色的猫眯着眼睛侧着头吃"+something);
    }
    public void catchMouse(){
        System.out.println("逮老鼠");
    }
}
package cn.Work1130.homeWork_03;

public class Dog extends Animal {
    public Dog() {
    }

    public Dog(String name, int age, String color) {
        super(name, age, color);
    }

    @Override
    public void eat(String something) {
        System.out.println(getAge()+"岁的"+getColor()+"颜色的狗两只前腿死死的抱住"+something+"猛吃");
    }
    public void lookHome(){
        System.out.println("看门");
    }
}
package cn.Work1130.homeWork_03;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

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

    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 void keepPet(Animal animal,String something){
        System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+animal.getColor()+"颜色的"+animal.getAge()+"岁的宠物");
        animal.eat(something);
    }
}
package cn.Work1130.homeWork_03;
public class Demo {
    public static void main(String[] args) {
        Person p = new Person("小王",30);
        p.keepPet(new Cat("加菲猫",10,"黄"),"");
        Person p1 = new Person("老李",25);
        p1.keepPet(new Dog("二郎犬",10,"黑"),"");
    }
}

13

请对下列代码进行补充,打印出接口中的变量num, 随后调用method方法,要求程序与最终运行结果吻合,(注意:打印num变量,不允许创建对象调用)
public class Demo4 {
    /*
     * 请编写程序, 打印出接口中的变量num, 随后调用method方法
     * 要求程序与最终运行结果吻合
     */
    public static void main(String[] args) {

    }
}

interface Inter {
    int num = 10;
    void method();
}

参考答案

public class Demo implements Inter {
    /*
     * 请编写程序, 打印出接口中的变量num, 随后调用method方法
     * 要求程序与最终运行结果吻合
     */
    public static void main(String[] args) {
        System.out.println(Inter.num);
        new Demo().method();
    }
    @Override
    public void method() {
        System.out.println("1");
    }
}

interface Inter {
    int num = 10;
    void method();
}

14.

定义USB接口:(开启功能)(关闭功能)
定义笔记本类:(开机功能)(关机功能)(定义使用USB设备的功能,要求:既能使用鼠标也能使用键盘,使用USB功能内部调用开启和关闭功能)
定义鼠标类:要符合USB接口
定义键盘类:要符合USB接口
定义测试类:创建电脑对象,依次调用开机方法,使用USB设备, 关机方法
运行结果:
笔记本开机
连接鼠标的USB
断开鼠标的USB
连接键盘的USB
断开键盘的USB
笔记本关机

参考答案

package cn.Work1130.hooong_05;

public interface USB {
    void open();
    void close();
}
package cn.Work1130.hooong_05;

public class Jotter {
    public void starting(){
        System.out.println("电脑开机");
    }
    public void  shutDown(){
        System.out.println("电脑关机");
    }
    public USB Usb(USB usb){
        return usb;
    }
}
package cn.Work1130.hooong_05;

public class Keyboard implements USB {
    @Override
    public void open() {
        System.out.println("键盘打开");

    }

    @Override
    public void close() {
        System.out.println("键盘关闭");
    }
}
package cn.Work1130.hooong_05;

public class Mouse implements USB {
    @Override
    public void open() {
        System.out.println("鼠标打开");
    }
    @Override
    public void close() {
        System.out.println("鼠标关闭");
    }
}
package cn.Work1130.hooong_05;

public class Demo {
    public static void main(String[] args) {
        Jotter jotter = new Jotter();
        jotter.starting();
        USB usb = jotter.Usb(new Mouse());
        usb.open();
        usb.close();
        USB usb1 = jotter.Usb(new Keyboard());
        usb1.open();
        usb1.close();
        jotter.shutDown();

    }
}

15.

定义动物类 属性:年龄行为:喝水,吃东西【吃什么不确定】
定义游泳接口: 行为:游泳方法
定义狗类 行为:吃饭(啃骨头)和 游泳(狗刨)
定义羊类: 行为:吃饭(羊啃草)
定义青蛙类: 行为:吃饭(吃虫子)和 游泳(蛙泳)
定义饲养员类: 行为:饲养动物:包括吃饭和喝水
定义测试类: 创建饲养员对象,饲养员调用三次饲养方法:饲养狗,饲养羊,饲养青蛙
要求:
1. 子类重写父类中的吃东西方法
2. 要求给狗和青蛙添加游泳的方法(实现游泳接口)
3. 饲养员类中定义一个方法,传入动物类对象(父类),
4. 调用吃饭方法,如果有游泳方法也需进行测试
运行结果:
喝水
狗啃骨头
狗会狗刨游泳
喝水
青蛙吃小虫
青蛙会蛙泳
喝水
羊啃草

参考答案

package cn.Work1130.homeWork_06;

public interface Swim {
    void swin();
}
package cn.Work1130.homeWork_06;

public abstract class Animal {
    private String name;
    private int age;

    public Animal() {
    }

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

    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 void He(){
        System.out.println("喝水");
    }
    public abstract void eat();
}
package cn.Work1130.homeWork_06;

public class Dog extends Animal implements Swim{
    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("狗吃米田共");
    }

    @Override
    public void swin() {
        System.out.println("狗刨");
    }
}
package cn.Work1130.homeWork_06;

public class Sheep extends Animal{
    public Sheep() {
    }

    public Sheep(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("羊吃草");
    }
}
package cn.Work1130.homeWork_06;

public class Frog extends Animal implements Swim{
    public Frog() {
    }

    public Frog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃虫子");
    }

    @Override
    public void swin() {
        System.out.println("仰泳");
    }
}
package cn.Work1130.homeWork_06;

public class Feeder {
    public Animal feeder(Animal animal){
        return animal;
    }
}
public class Demo {
    public static void main(String[] args) {
        Feeder f = new Feeder();
        Dog a= (Dog) f.feeder(new Dog("小黑",10));
        a.He();
        a.eat();
        a.swin();
        Sheep s=(Sheep)f.feeder(new Sheep("小白",2));
        s.He();
        s.eat();
        Frog F=(Frog) f.feeder(new Frog("小青",4));
        F.He();
        F.eat();
        F.swin();
    }
}

你可能感兴趣的:(java第二阶段练习)