java 构造函数和super

package one;
class book
{
	book()
	{System.out.println("这是没有参数的父类的构造方法");}
	book(int i)
	{System.out.println("有参数   父类的构造方法");}
	
	public void get()
	{System.out.println("book父类");}
		
}
class dictionary extends book
{
	dictionary()  
	{System.out.println("子类 无参数 的构造方法哦");}	
	dictionary(int i)
	{System.out.println("子类 有参数 的构造方法哦");}
	
	
	public void get() //子类覆盖父类的方法
	{
	System.out.println("子类dictionary.");
	}
	public void get(int pages)  /*get方法的重载, 重载是  方法名相同,参数表不同*/	
	{
	System.out.println("子类dictionary get方法重载.");
	}
	public void son()
	{
		System.out.println("这是子类新添加的方法,父类没有哦.");
	}
}

public class haha { 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		book a= new book();
		System.out.println("-----------------");
		book e= new book(123);
		System.out.println("-----------------");
		book b= new dictionary(2);//多态  向上类型转换
		System.out.println("-----------------");
		dictionary c=new  dictionary(3);
		System.out.println("-----------------");
		dictionary d=new  dictionary();
		b.get();		 
        c.son();
//		b.son();   此句编译不通过
		/*(编程看左边,执行看右边)book b= new dictionary(2); 
		 即编译器看的是引用变量,因为book类里面没有son这个方法*/


	}

}

运行结果

这是没有参数的父类的构造方法
-----------------
有参数   父类的构造方法
-----------------
这是没有参数的父类的构造方法
子类 有参数 的构造方法哦
-----------------
这是没有参数的父类的构造方法
子类 有参数 的构造方法哦
-----------------
这是没有参数的父类的构造方法
子类 无参数 的构造方法哦
子类dictionary.
这是子类新添加的方法,父类没有哦.

1 调用子类构造函数的时候,会默认先调用父类的无参数构造方法,即相当于隐藏了一行代码 super();

2.在你程序没有写构造方法时候,编译器会默认帮你写一个无参数的构造方法,只不过方法里面没有内容
然而当你编写了构造函数的话,编译器就不会再帮你添加无参数的构造方法了,即使你只编写了有参数的构造方法。
如果你已经写了一个有参数的构造函数,并且你需要一个没有参数的构造函数,你必须自己动手写。
只要你有自己写的构造函数,不管是哪一种,这都会想是在跟编译器说:老兄,我自己的构造函数不用你管。


在这里插入图片描述

写了book(i),而没有写book()这种无参数的,编译器会认为你既然写了构造函数了,我就不管了,所以不会为你默认添加book() 而子类的构造函数是要先调用父类的,默认无参数的构造函数,此时我们因为没有定义这种,所以报错。

在这里插入图片描述

dictionary()通过super(i)调用父类构造函数。编译成功

dictionary(i)没有编译成功,是因为默认 子类构造函数 先调用无参数的父类构造函数,super() ,然后因为没有嘛,所以错误。

构造函数的作用
来初始化对象的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值