JAVA核心技术第五单元纠错

class Ca{
	    int num = 1;
	    Ca(int num){
		        this.num = num;
		        System.out.print(this.num);
	    }
}

class Cb extends Ca{

    int num = 2;
	    Cb(int num) {
		        this.num = num;
        System.out.print(num);

	    }
	
	    public static void main(String[] args) {
		        Ca a = new Cb(5);
	    }
} 

父类已经定义了一个有参构造函数,你是人家儿子,你老爸都弄了个构造函数,你不得调用人家的构造函数呀

原因是我们调用子类,无论是什么情况,都会调用子类的构造函数(不管有参无参)与此同时子类函数extends父类函数,所以不管怎样***就会先调用父类的默认的无参的构造函数***
***更重要一点,我加上一个super()***()里面是父类构造函数里面的参数

class A
{
	public void fun1()
	{
		System.out.println("A fun1 is calling");
	}
	public void fun2()
	{
		fun1();
	}
}
class B extends A
{
	public void fun1()
	{
		System.out.println("B fun1 is calling");
	}
	public void fun3()
	{
		System.out.println("B Fun3 is calling");
	}
}
public class C
{

	public static void main(String[] args)
	{
		A a=new B();
		a.fun1();
		a.fun2();
		a.fun3();
	}

}


直接看main()函数,第一句话就用了转型定义了a表面上用了A,实则确是B
在函数中B函数重写(overwrite)了fun1
所以调用fun1的时候自动输出“B fun1 is calling”
继续的调用main()第二行,输出:"B fun1 is calling"因为A里面定义的fun2就是自动调用了B的fun1
知道第三行竟然报错
执行之后说A类里面没有fun3()
可能这涉及到转型方面的一些小要点,是说我虽然转型,但是我只能使用我转型后内部的函数方法(包括重写overwrite)不包括原来的(即子类的函数)

class Pencil  {

	public void write (String content){

		System.out.println( "Write"+content);

	}

}



class RubberPencil extends Pencil{

	public void write (String content){

		System.out.println("Rubber Write"+content)}



  public void erase (String content){

	  System.out.println( "Erase "+content);

  }

}

执行下列代码的结果是哪项?

Pencil  p=new  Pencil();

(( RubberPencil) p).write("Hello");

爸爸变成儿子????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值