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

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

被折叠的 条评论
为什么被折叠?



