继承-练习题-Java

文章讲述了Java中类的构造器使用,包括无参和有参构造,以及在子类中如何通过`super`调用父类构造器。实例演示了如何在`PC`和`NotePad`子类中继承`Computer`类,设置特定属性和调用基类方法。

练习1

main函数中:B b=new B(); 会输出什么?

	class A {
	    A() {System.out.println("a"); }
	    A(String name) { System.out.println("a name"); }
	}
	class B extends A{
	    B() { this("abc"); System.out.println("b");}
	    B(String name){System.out.printn("b name");}
	}

在这里插入图片描述
B的无参构造器中,有了this就不会有super
B的有参构造器,第一行默认通过super 调用父类的无参构造器

练习2

main 方法中: CC c =new CC(); 输出么内容?

	class AA {//AA 类
	    public AA() {
	        System.out.println("我是 AA 类");
	    }
	}
	class BB extends AA { //BB 类,继承 AA 类 
	    public BB() {
	        System.out.println("我是 BB 类的无参构造");
	    }
	    public BB(String name) {
	        System.out.println(name + "我是 BB 类的有参构造");
	    }
	}
	
	class CC extends BB { //CC 类,继承 BB 类
	    public CC() {
	        this("hello");
	        System.out.println("我是 CC 类的无参构造");
	    }
	    public CC(String name) {
	        super("hahah");
	        System.out.println("我是 CC 类的有参构造");
	    }
	}

我: CC()进入CC的无参构造器,有this,this和super互斥,进入CC的有参构造器 【CC(“hello”)】
super调用父类BB的有参构造器,BB还有父类AA
输出应该为:
我是 AA 类
hahah我是 BB 类的有参构造
我是 CC 类的有参构造
我是 CC 类的无参构造
在这里插入图片描述

练习3

ExtendsExercise03.java

编写 Computer 类,包含 CPU、内存、硬盘等属性,getDetails 方法用于返回 Computer 的详细信息
编写 PC 子类,继承 Computer 类,添加特有属性【品牌 brand】
编写 NotePad 子类,继承 Computer 类,添加特有属性【color】
编写 Test 类,在 main 方法中创建 PC 和 NotePad 对象,分别给对象中特有的属性赋值,以及从 Computer 类继承的
属性赋值,并使用方法并打印输出信息

我的错误:
(1)属性没有要求默认写private ->对应写set get方法
(2)Computer、PC、NotePad类的构造器
只写Computer的有参构造器,PC类、NotePad类继承时就会出问题,因为此时父类Computer没有无参构造器
解决方法①Computer中重写无参构造器 ②PC类中的构造器,程序员用super调用有参构造器(IDEA 会根据继承的规则,自动把构造器的调用写好)
(3)PC、NotePad类打印的时候,设置共有的打印函数,调用父类中的打印函数

public class ExtendsExercise03 {
    public static void main(String[] args) {
        PC pc = new PC("i5","pc_memory"
                       ,"pc_HardDisk","Intel");
        System.out.println(pc.getPCDetails());

        NotePad notePad = new NotePad("IOS","notePad_memory"
                                        ,"notePad_HardDisk","pink");
        System.out.println(notePad.getNotePadDetails());
    }
}

class Computer {
    private String cpu;
    private String memory;
    private String hardDisk;

    //注意
    public Computer(String cpu, String memory, String hardDisk) {
        setCpu(cpu);
        setMemory(memory);
        setHardDisk(hardDisk);
    }

    public String getDetails() {
        return "cpu="+getCpu()+", memory="+getMemory()
                +", hardDisk="+getHardDisk();
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getHardDisk() {
        return hardDisk;
    }

    public void setHardDisk(String hardDisk) {
        this.hardDisk = hardDisk;
    }
}

class PC extends Computer {
    private String brand;

    //注意
    public PC(String cpu, String memory, String hardDisk, String brand) {
        super(cpu, memory, hardDisk);
        this.brand = brand;
    }
    //注意
    public String getPCDetails() {
        return getDetails() + ", brand="+getBrand();
    }

    public String getBrand() {
        return brand;
    }

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

class NotePad extends Computer {
    private String color;

    public NotePad(String cpu, String memory, String hardDisk, String color) {
        super(cpu, memory, hardDisk);
        this.color = color;
    }

    public String getNotePadDetails() {
        return getDetails() + ", color="+getColor();
    }

    public String getColor() {
        return color;
    }

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

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值