练习代码(三)复用类

小白做课后习题,有不对的地方或者不好的地方多多包容。

1.创建两个带有缺省构造器(空参数列表)的类A和类B。从A中继承产生一个名为C的信类,并在C内创建一个B类的成员。不要给C编写构造器。创建一个C类的对象并观察其结果。

package six;
class A{
     public  A(){
System.out.println("A");
}
}
class B{
 public  B(){
System.out.println("B");
}
}
public class C extends A{

public static void main(String[] args){
B b = new B();
C c = new C();
}
}

输出结果为:

B

A

2.修改练习1,使A和B以带参数的构造器取代缺省的构造器。为C写一个构造器,并在期中执行所有的初始化。

package six;
class A{
public A(String a){
System.out.println(a);
}
}
class B{
public B(String b){
System.out.println(b);
}
}
public class C extends A{
    public C(){
super("A");
B b = new B("B");
}
public static void main(String[] args){
new C();
}
}

输出结果为:

A

B

3.创建一个简单的类。在第二个类中,将一个引用定义为第一个类的对象。运用惰性初始化来实例化这个对象。

package six;
class A{
public A(String a){
System.out.println(a);
}
}
public class C{
   private A ab = null;
String a;
public A geta(){
if(ab == null)
ab = new A("A");
return ab;
}
    public static void main(String[] args){
   C c = new C();
   c.geta();
}
}

4. 请证明缺省构造器是编辑器所创建的。

package six;

public class C{

    public static void main(String[] args){
    new C();
}
}

5.证明基类构造器:(a)总是会被调用;(b)在导出类构造器之前被调用。

package six;
class A{
A(){
System.out.println("A");
}
}
public class C extends A{
C(){
System.out.println("C");
}
    public static void main(String[] args){
    new C();
}
}

输出结果:

A

C

6. 创建一个基类,它仅有一个非缺省构造器;再创建一个导出类,它带有缺省构造器和非缺省构造器。在导出类的构造器中调用基类的构造器。

package six;
class A{
A(String a){
System.out.println(a);
}
}
public class C extends A{
C(){
super("A");
System.out.println("C");
}
C(String c){
super("A");
System.out.println(c);
}
    public static void main(String[] args){
    new C();
    new C("Cc");
}
}

输出结果:

A
C
A
Cc

7. 创建一个Root类,令其含有名为Component1,Component2,Component3的类各一个实例。从Root中派生一个类Stem,也含有上述各“组成部分”。所有的类都应带有可打印出类的相关信息的缺省构造器。

package six;
class Connpent1{
public Connpent1(){
System.out.println("Connpent1()");
}
}
class Connpent2{
public Connpent2(){
System.out.println("Connpent2()");
}
}
class Connpent3{
public Connpent3(){
System.out.println("Connpent3()");
}
}
class Root {
Connpent1 a1 = new Connpent1();
Connpent2 a2 = new Connpent2();
Connpent3 a3 = new Connpent3();
public Root(){
System.out.println("Root()");
}
}
public class Stem extends Root {
Connpent1 a1 = new Connpent1();
Connpent2 a2 = new Connpent2();
Connpent3 a3 = new Connpent3();
public Stem(){
System.out.println("Stem()");
}
    public static void main(String[] args){
new Stem();
}
}

输出结果:

Connpent1()
Connpent2()
Connpent3()
Root()
Connpent1()
Connpent2()
Connpent3()
Stem()

8. 修改练习7,使每个类都仅具有非缺省构造器。

package six;
class Connpent1{
public Connpent1(String s){
System.out.println("Connpent1()");
}
}
class Connpent2{
public Connpent2(String s){
System.out.println("Connpent2()");
}
}
class Connpent3{
public Connpent3(String s){
System.out.println("Connpent3()");
}
}
class Root {
Connpent1 a1 = new Connpent1("a");
Connpent2 a2 = new Connpent2("b");
Connpent3 a3 = new Connpent3("c");
public Root(int i){
System.out.println("Root()");
}
}
public class Stem extends Root {
Connpent1 a1 = new Connpent1("a");
Connpent2 a2 = new Connpent2("b");
Connpent3 a3 = new Connpent3("c");
public Stem(int i){
super(345);
System.out.println("Stem()");
}
    public static void main(String[] args){
new Stem(123);
}
}

输出结果:

Connpent1()
Connpent2()
Connpent3()
Root()
Connpent1()
Connpent2()
Connpent3()
Stem()

9. 创建一个类,它应带有一个被重载了三次的方法。继承产生一个新类,并添加一个该方法的新的重载定义,展示这四个方法在导出类中都是可以使用的。

package six;
class Root{
public void say(String a){
System.out.println(a);
}
public void say(int a){
System.out.println(a);
}
public void say(char a){
System.out.println(a);
}
}
public class Stem extends Root{
public void say(double a){
System.out.println(a);
}
public static void main(String[] args){
Stem stem = new Stem();
stem.say("World");
stem.say(123);
stem.say('x');
stem.say(1.0);
}
}

输出结果:

World
123
x
1.0

10 .创建一个名为Amphibian的类。由此继承产生一个称为Frog的类。在基类中设置适当的方法。在main()方法中,创建一个Frog并向上转型至Amphibian,然后说明所有方法都可工作。

package six;
class Amphibian{
public void printa(){
System.out.println("Hello World");
}
}
public class Frog extends Amphibian{
public void printf(){
System.out.println("Hello Java");
}
public static void main(String[] args){
Amphibian a = new Frog();
a.printa();
}
}

输出结果:

Hello World

11. 修改练习10,使Frog覆盖基类中的方法定义,请留意main()中都发生了什么。

package six;
class Amphibian{
public void print(){
System.out.println("Hello World");
}
}
public class Frog extends Amphibian{
public void print(){
System.out.println("Hello Java");
}
public static void main(String[] args){
Amphibian a = new Frog();
a.print();
}
}

输出结果:

Hello Java   

基类中的方法无法被调用。

12. 创建一个含有指向某对象的空白final引用的类。在所有的构造器内部都执行空白final的初始化动作。说明Java确保final在使用前必须被初始化,且一旦被初始化即无法改变。

package six;
class Amphibian{
public Amphibian(String s){
System.out.println(s);
}
}
public class Frog {
private final Amphibian ahn;
public Frog(){
ahn = new Amphibian("initialize");
}
public Frog(String s){
ahn = new Amphibian(s);
}
public static void main(String[] args){
new Frog();
new Frog("initialize");
}
}

输出结果:

initialize
initialize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值